当您为内存分配空间时,如何判断是否需要为其分配更多空间?是否有检查或您可以对新内存进行检查以确保它运行正常?(为结构分配内存)。
因为我在想的是,结构是一组数据,即使我传递了很多数据,它也永远不需要超过结构正确的大小?
如果您只是使用简单的struct,随着时间的推移,您不需要为其分配更多内存。您只需创建struct、使用它并在需要时清理它。如果您正在动态分配结构(即: with 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;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要创建一个动态分配结构的数组,并且您已经用完了它们,并且需要更多,那么您可能最好使用稍微复杂一些的方法,例如动态分配的结构链表。一个很好的例子可以在下面的“参考”部分找到。此外,我还提供了一个链接,指向我在 C 中的内存分配上回答的一个有点相关的问题。它有一些很好的例子,可能也有助于为你澄清这个话题。
参考
<http://www.thegeekstuff.com/2012/08/c-linked-list-example/></sf/ask/1121501811/>