关于动态分配内存之后,将动态分配的内存地址指向一个数组的首地址,报错了,不解,求指教。
#include<stdio.h>#include<malloc.h>intmain(){inta[5]={1,2,3,6,8};int*pArr=(int*)mallo...
#include<stdio.h>
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr=(int *)malloc(sizeof(int)*5);
pArr=a;
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
free(pArr);
return 0;
}
弹出了debug assertion failure的错误对话框,求解释 展开
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr=(int *)malloc(sizeof(int)*5);
pArr=a;
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
free(pArr);
return 0;
}
弹出了debug assertion failure的错误对话框,求解释 展开
4个回答
展开全部
这个问题出在 free(pArr); 语句。但是根本原因是这句:pArr=a;
因为,int *pArr=(int *)malloc(sizeof(int)*5); 之后,pArr就指向了一块由malloc分配的内存,这块内存和int a[5]的内存是不同的内存。int a[5]是在程序运行时由系统分配,且不能被释放(free)。
当执行了pArr=a; 后,pArr指向了a[5]这块内存,运行for循环时,通过pArr正常访问没有问题,当执行free(pArr);时,就是执行free(a)。由于a[5]这块内存不能被释放,所以出现异常。
在这段程序中,动态申请分配的内存实际上没有使用,而原来指向动态分配内存的指针pArr由于指向了a[5],这块动态申请的内存也无法被访问。
因为,int *pArr=(int *)malloc(sizeof(int)*5); 之后,pArr就指向了一块由malloc分配的内存,这块内存和int a[5]的内存是不同的内存。int a[5]是在程序运行时由系统分配,且不能被释放(free)。
当执行了pArr=a; 后,pArr指向了a[5]这块内存,运行for循环时,通过pArr正常访问没有问题,当执行free(pArr);时,就是执行free(a)。由于a[5]这块内存不能被释放,所以出现异常。
在这段程序中,动态申请分配的内存实际上没有使用,而原来指向动态分配内存的指针pArr由于指向了a[5],这块动态申请的内存也无法被访问。
展开全部
#include<stdio.h>
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr=(int *)malloc(sizeof(int)*5); /*这里刚分配了内存*/
pArr=a; /*然后把刚分配的内存丢下不管,指向栈空间a了,发生了泄漏事件 */
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
free(pArr); /*pArr指向的是栈内的a,是不能free的*/
return 0;
}
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr=(int *)malloc(sizeof(int)*5); /*这里刚分配了内存*/
pArr=a; /*然后把刚分配的内存丢下不管,指向栈空间a了,发生了泄漏事件 */
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
free(pArr); /*pArr指向的是栈内的a,是不能free的*/
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然pArr 的指向被修改了
从 指向 malloc 分配的那块内存 变为 指向 数组a
free 就 free不了 malloc 的那块了
数组a 不是 你想free就能free的 ,
从 指向 malloc 分配的那块内存 变为 指向 数组a
free 就 free不了 malloc 的那块了
数组a 不是 你想free就能free的 ,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你改一下
#include<stdio.h>
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr;
pArr=a;
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
return 0;
}
#include<stdio.h>
#include<malloc.h>
int main()
{
int a[5]={1,2,3,6,8};
int *pArr;
pArr=a;
for(int i=0;i<5;i++)
{
printf("%d ",pArr[i]);
printf("%d \n",*(pArr+i));
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询