我正在堆上分配一堆"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数组,而不是自己的每个元素?
你分配一个单块的内存用于所有的Todo结构.你不能释放一个元素.就像你不应该释放非堆分配数组的元素一样.
每次对malloc(或calloc)的调用都应该通过一次调用来匹配free.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |