在C中分配堆上的数组

use*_*221 1 c pointers

我正在堆上分配一堆"Todo"结构,如下所示:

struct Todo *todos = malloc(n * sizeof(*todos));
Run Code Online (Sandbox Code Playgroud)

我的理解是,我现在为所有n个Todo结构分配了内存.所以,如果我想保存一些值,我可以这样做:

todos[i].id = 1;
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我尝试释放内存使用free(&todos[i]);我得到一个错误告诉我,我没有分配该指针.

我现在的问题是,我是否只需要释放todos数组,而不是自己的每个元素?

Som*_*ude 5

你分配一个单块的内存用于所有Todo结构.你不能释放一个元素.就像你不应该释放非堆分配数组的元素一样.

每次对malloc(或calloc)的调用都应该通过一次调用来匹配free.

  • @ user2403221是的,这是准确的. (2认同)