gpt4 book ai didi

C结构和内存分配

转载 作者:行者123 更新时间:2023-12-01 22:36:21 24 4
gpt4 key购买 nike

当你为内存分配空间时,你如何判断是否需要为它分配更多空间?是否有检查或您可以对新内存进行检查以确保它运行正常? (为结构分配内存)。

因为我在想,结构是一定数量的数据,即使我经常传递它,它也永远不需要超过结构的大小,对吗?

最佳答案

如果您只是使用一个简单的 struct ,随着时间的推移,您不需要为其分配更多内存。您只需创建 struct ,使用它,并在需要时清理它。如果您正在动态分配您的结构(即:使用 malloc ),那么您将测试您创建的指向结构的指针的值,看看它是否是 NULL .如果是NULL ,然后内存分配失败,您可以重试或放弃进一步的操作(即:在错误情况下退出)。

#include <stdio.h>

typedef struct myStruct {
int i;
char c;
} myStruct;

int main(void) {
// Static allocation, no cleanup required
myStruct staticStruct;
staticStruct.i = 0;
staticStruct.c = 'c';

// Dynamic allocation, requires cleanup
myStruct* dynamicStruct;
dynamicStruct = malloc(sizeof(myStruct));
if (dynamicStruct == NULL) {
printf("Memory allocation error!\n");
return (-1);
} else {
printf("Successfully allocated memory!\n");
}

dynamicStruct->i = 1;
dynamicStruct->c = 'd';
free(dynamicStruct); // Release allocated memory
dynamicStruct = NULL; // Somewhat common practise, though not 100% necessary
return 0;
}

现在,如果您需要创建一个动态分配的结构数组,并且您已经用完了它们,并且需要更多,那么您可能最好使用稍微复杂一点的方法,例如动态分配的链表的结构。在下面的“引用”部分可以找到一个很好的例子。此外,我还提供了一个链接,指向我在 C 中回答的关于内存分配的一个有点相关的问题。它有一些很好的例子,可能也有助于为您理清这个主题。

引用资料


  1. 用示例 C 程序解释 C 链表数据结构,2014 年 3 月 25 日访问, <http://www.thegeekstuff.com/2012/08/c-linked-list-example/>
  2. 声明的字符串和分配的字符串之间的区别,2014 年 3 月 25 日访问, <https://stackoverflow.com/questions/16021454/difference-between-declared-string-and-allocated-string>

关于C结构和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649711/

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