c - 在C中的堆上分配数组
问题描述
我在堆上分配一组“Todo”结构,如下所示:
struct Todo *todos = malloc(n * sizeof(*todos));
我的理解是,我现在已经为我的所有 n 个 Todo 结构分配了内存。因此,如果我想保存一些值,我可以这样做:
todos[i].id = 1;
现在的问题是,如果我尝试使用释放该内存,则会free(&todos[i]);
收到一条错误消息,告诉我我尚未分配该指针。
我现在的问题是,我是否只需要释放todos
数组而不是每个元素自己?
解决方案
您已为所有结构分配了一个内存块。您不能释放单个元素。就像您不应该释放非堆分配数组的元素一样。Todo
malloc
对(or ) 的每个调用calloc
都应与对 的单个调用匹配free
。
推荐阅读
- javascript - 如何将索引号传递给反应类?
- python - 一些 Keras 预训练的网络在使用之前是否需要特殊的预处理?
- c# - .NET Core - HTTPClient - Ubuntu 20.04 上的 dh 密钥太小
- c++ - 如何让“make”知道其他目录的变化?
- javascript - 使用变量值作为角度标签属性值
- python - 列表无法识别 Plotly
- microsoft-graph-api - 适用于 Azure B2B 的 ASP.net 应用程序的 MS Graph 的 ADAL 或 MSAL
- amazon-web-services - 除了 AssumeRole 之外,还需要哪些权限才能在 AWS 控制台中将角色切换到另一个账户?
- reactjs - 如何在 React Router v6 中根据路由更改或参数创建动态子标题?
- r - 在 r 中为 easyalluvial alluvial_wide 添加标签值