gpt4 book ai didi

c - 基本 Malloc/免费

转载 作者:太空狗 更新时间:2023-10-29 16:09:03 26 4
gpt4 key购买 nike

如果我有这样的程序片段:

struct Node *node;
while(...){
node = malloc(100);
//do stuff with node
}

这意味着每次我在 while 循环中循环时,我都会新分配节点指针指向的 100 个字节,对吗?

如果这是真的,那么如果我只有一个指向发生的最后一个 malloc 的指针,我该如何释放所有循环产生的所有内存?

谢谢!

最佳答案

请准确分配您需要的尺寸:malloc(sizeof *node); -- 如果您迁移到 64 位平台,使所有成员的大小加倍,那么您的旧 96 字节结构在新环境中可能需要 192 字节。

如果您没有指向任何 struct Node 的指针如果您已创建,那么我认为您不应该使用 malloc(3) 分配它们首先。 malloc(3)如果您的应用程序需要数据在当前函数的调用范围之外保留,则最好。我希望您可以像这样重写您的函数:

struct Node node;
while(...){
//do stuff with node
}

while(...){
struct Node node;
//do stuff with node
}

取决于您是否要访问最后一个节点(第一个版本)或不(第二个版本)。

当然,如果您确实需要这段代码之外的那些结构,那么您需要将对它们的引用存储在某处。将它们添加到跟踪 struct Node 的全局列表中对象,或将每个对象添加到 next previous 的指针 struct Node , 或将每个添加到相应的 struct User引用它们,无论什么最适合您的应用程序。

关于c - 基本 Malloc/免费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com