我有一个关于使用 realloc 函数的小问题。假设我有:
typedef struct
{
char* location;
int temp;
int numberOfRec;
}TEMP;
然后我在 main 中声明一个指向该结构的指针并分配内存:
int main()
{
TEMP* data = xCalloc (1, sizeof(TEMP)); //wrapper function
data->location = xCalloc (20, sizeof(char)); //wrapper function
}
现在,如果我在另一个函数中为 data->location 重新分配内存。我需要返回TEMP*数据的地址吗?
int main()
{
someFunction(data); // Use this function or...
//data = someFunction(data);
...
}
void someFunction(TEMP* data)
{
...
data->location = xRealloc (data->location, 10 * sizeof(char));
}
最佳答案
没有。你不知道。这是因为 data
是指向结构的指针。每当您使用“->”运算符通过 data
访问结构的元素时,您首先会取消对指针的引用。
例如,
数据->位置
==> (*data).location
此外,当你这样做时,
data->location = xRealloc(data->location, 10 * sizeof(char));
如果 realloc 失败,您将泄漏内存并可能调用未定义的行为(如果不包括 NULL 指针检查),因为 data->location
尚未free
code>d 并且它将被分配为 NULL,因为 realloc
在失败时返回 NULL。
我建议您改为执行以下操作。
void *temp = NULL;
temp = xRealloc (data->location, 10 * sizeof(char));
if(temp == NULL)
{
// realloc failed.
free(data->location);
data->location = NULL;
}
else
{
// Continue
data->location = temp;
}
我编译了一个minimal example为你。
关于c - 使用 realloc 缩小结构内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074177/