C中的字符串数组内存重新分配
Array of strings memory reallocation in C
我有一个项目要做,我需要为数组重新分配内存。我尝试了很多次,但我发现只有一个版本有效。
void resize(int* size, char*** arr)
{
*size *= 2;
*arr = realloc(*arr, sizeof(char*) * *size);
nulltest(*arr); // This checks if the allocation was successful
}
resize(&size, &arr);
这个函数可以把数组的容量翻倍,但是我觉得做的太复杂了,所以想请教各位,这个能不能简化一下。我也愿意接受新的解决方案。
int
不是适合大小的类型。使用正确的 size_t
- 尽量避免没有特殊需要的副作用(即修改通过引用传递的对象)。
- 您的代码可能会泄漏内存。如果
realloc
失败,您将失去对先前分配的内存的引用。 size
引用的整数也被无须更改。
我会这样实现:
char **resize(char **arr, size_t newsize)
{
return realloc(arr, size * sizeof(*arr));
}
并且调用函数应该检查错误。
但是定义这个函数有什么意义呢?这只 return 是 realloc
的 return 值。
我有一个项目要做,我需要为数组重新分配内存。我尝试了很多次,但我发现只有一个版本有效。
void resize(int* size, char*** arr)
{
*size *= 2;
*arr = realloc(*arr, sizeof(char*) * *size);
nulltest(*arr); // This checks if the allocation was successful
}
resize(&size, &arr);
这个函数可以把数组的容量翻倍,但是我觉得做的太复杂了,所以想请教各位,这个能不能简化一下。我也愿意接受新的解决方案。
int
不是适合大小的类型。使用正确的size_t
- 尽量避免没有特殊需要的副作用(即修改通过引用传递的对象)。
- 您的代码可能会泄漏内存。如果
realloc
失败,您将失去对先前分配的内存的引用。size
引用的整数也被无须更改。
我会这样实现:
char **resize(char **arr, size_t newsize)
{
return realloc(arr, size * sizeof(*arr));
}
并且调用函数应该检查错误。
但是定义这个函数有什么意义呢?这只 return 是 realloc
的 return 值。