【发布时间】:2022-01-01 08:50:48
【问题描述】:
我有一个项目要做,我需要为数组重新分配内存。我尝试了很多次,但我发现只有一个版本有效。
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);
这个函数把数组的容量加倍了,但是我觉得做的太复杂了,所以想问问各位大大,能不能简化一下。我也乐于接受新的解决方案。
【问题讨论】:
-
简化是什么意思?这就是实现中的三行代码,使用的一行代码,你需要它简单到什么程度?
-
这个函数只做一件事——引入错误。不好,不需要
-
是的,我同意,我会直接调用
realloc,但可以说这使得它变得不那么简单,因为您确实需要在任何地方而不是在函数内部进行新的大小计算和错误检查。 (我也给出了怀疑的好处,并假设nulltest在失败时使程序崩溃,这就是不需要返回错误状态的原因。) -
但是,忽略这个问题,我认为将其复杂化而不是简化是有益的,例如,测试错误并允许调用者确定大小是如何增加的(例如何时
* 2如果最终大小已知,则不够或过多)。但是,正如已经指出的那样,您基本上只有realloc。
标签: arrays c string pointers realloc