【发布时间】:2011-09-04 10:14:25
【问题描述】:
我正在尝试为正在从文件读取/向文件读取或由用户输入的结构数组(实际上是一个数组,每个 2 个结构,但为了简单起见,此处包括 1 个)动态重新分配内存。
typedef Struct
{
char surname[21];
char firstname[21];
char username[21];
...
} User;
...在 main():
int size = 0; /* stores no. of structs */
User* user_array = (User *) calloc(1, sizeof(User));
if(user_array == NULL)
{
printf("Cannot allocate initial memory for data\n");
exit(1);
}
else
size++;
然后我尝试在需要时使用函数调用来增加数组:
int growArray(User user_array*, int size)
{
User *temp;
size++;
temp = (User *) realloc(user_array, (size * sizeof(User));
if(temp == NULL)
{
printf("Cannot allocate more memory.\n");
exit(1);
}
else
user_array = temp;
return size;
}
不幸的是,realloc 永远不会起作用。两个结构每个实例只有大约 200 个字节,将初始大小设置为 10 可以正常工作,所以我尝试使用 realloc 的方式一定有问题。
系统是 Win 7 64,在具有 4GB 的 Core i5 上,运行 Quincy(MinGW GUI)。
【问题讨论】:
-
int growArray(User user_array, int size)?您是否缺少*? -
发布真实代码 - 这不会编译
-
@KennyTM 我认为他错过了其中两个。
-
如果你让它工作,你可以通过使用 growArray 进行初始分配来简化代码。另外,请注意,您的初始 calloc() 将初始化第一个条目,而随后的 realloc() 将使扩展区域未初始化。像 cnicutar 笔记一样,调用者看不到“size++”。
-
dantje - 目前我使用 size 作为我的返回值 - 抱歉漏掉了