这样会不会造成内存泄漏啊????????????????

sdkwjc 2011-05-25 10:42:57
动态申请二维数组
一开始我把数组设置为10行5列的
(int **p)=(int **)malloc(sizeof(int *)*10);
for(i=0;i<10;i++)
{
(int *)(p+i)=(int *)malloc(sizeof(int)*5);
}

现在改成5行5列的

(int **p)=(int **)realloc(p,sizeof(int *)*5);
for(i=0;i<5;i++)
{
(int *)(p+i)=(int *)malloc(sizeof(int)*5);
}

大家看看这样会不会内存泄露啊?realloc能不能深层释放指针所指向空间的指针所指向的空间啊????????
...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-05-25
  • 打赏
  • 举报
回复
void *realloc(void *p, size_t size)
realloc changes the size of the object pointed to by p to size. The contents will be unchanged up to the minimum of the old and new sizes. If the new size is larger, the new space is uninitialized. realloc returns a pointer to the new space, or NULL if the request cannot be satisfied, in which case *p is unchanged.

它只会释放你指定的内存 -- *p
就想叫yoko 2011-05-25
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 ljt3969636 的回复:]

不行
realloc只会释放(int **p)=(int **)malloc(sizeof(int *)*10);的内存
而(int *)(p+i)=(int *)malloc(sizeof(int)*5);一级的你要先于realloc p之前手动释放
[/Quote]
CrackValue 2011-05-25
  • 打赏
  • 举报
回复
好像会的,在进行realloc后,原先分配的里层内存区域已经不受你控制了,所以没有释放,也没有办法释放了,
回答不好别见怪。
bdmh 2011-05-25
  • 打赏
  • 举报
回复
先free,再分配
ljt3969636 2011-05-25
  • 打赏
  • 举报
回复
不行
realloc只会释放(int **p)=(int **)malloc(sizeof(int *)*10);的内存
而(int *)(p+i)=(int *)malloc(sizeof(int)*5);一级的你要先于realloc p之前手动释放
screwzm 2011-05-25
  • 打赏
  • 举报
回复
为了保险起见,最好先释放内存再分配!!!!
我真的是琦琦 2011-05-25
  • 打赏
  • 举报
回复
谁malloc谁free;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧