【发布时间】:2014-02-15 23:52:12
【问题描述】:
//char char **p; declared in .h file
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs);
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
我的代码在尝试释放 for 循环中 p 的最后一个元素时停止。任何人我可能做错了什么?
编辑:即使将其更改为 (char*)malloc(bs sizeof(char *));
这仍然不起作用:
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs* sizeof(char *));
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
使用 new 代替 malloc 也不能解决问题
但是,这段代码可以很好地释放内存。
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs* sizeof(char *));
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
所以问题似乎与这段代码有关
for(size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
我希望这是一个隐式链表,有人知道我在做什么错吗?
【问题讨论】:
-
为什么在使用
malloc时使用C++标签? -
是 C 还是 C++?我想这在任何一个中都有效,但可能只选择一个。
-
free a double pointer 的可能重复项
-
您意识到
&(pool[j + 1][0])与pool[j + 1]完全相同? -
@Ed:迭代索引在
for括号内声明;对我来说,这看起来像是 C++ 功能。 (它是在后来的 C 版本中添加的吗?
标签: c++ c malloc free double-pointer