首页 > 解决方案 > 在C中的堆上分配数组

问题描述

我在堆上分配一组“Todo”结构,如下所示:

struct Todo *todos = malloc(n * sizeof(*todos));

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

todos[i].id = 1;

现在的问题是,如果我尝试使用释放该内存,则会free(&todos[i]);收到一条错误消息,告诉我我尚未分配该指针。

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

标签: cpointers

解决方案


您已为所有结构分配了一个内存块。您不能释放单个元素。就像您不应该释放非堆分配数组的元素一样。Todo

malloc对(or ) 的每个调用calloc都应与对 的单个调用匹配free


推荐阅读