我尝试使用**array
创建的realloc
增加malloc
的大小。
我将**array
提交给了一个我希望增加大小的函数。
这是增加尺寸的部分:
imginf->height = imginf->height * 2;
imginf->width = imginf->width * 2;
array = realloc(array, imginf->height * sizeof(d*));
for(int i = 0; i < imginf->height; i++) {
array[i] = malloc(imginf->width * sizeof(d));
}
之后,我用两个for循环填充数组。一切正常!
在下一个函数中,我尝试将该数组保存在文件中。在这里我还使用了两个for循环。 通过第一个for循环,我走过高处,在这里我遇到了问题。
如果循环计数器为(imginf->height /2)
,我就会用尽阵列。对于宽度,一切都很好。
出了什么问题?特别是,为什么我可以填充阵列?
修改
这里是保存的功能定义:
void Save(char * newname, inf imginf, d **array);
d是一个包含3个无符号字符的结构。
这里是realloc函数的定义:
void reallocBig(inf *imginf, d **array);
格尔茨。
答案 0 :(得分:4)
C是一种按值传递的语言。您的reallocBig
函数无法修改调用者中数组的值。您需要更改它以获取d ***
参数,并在函数中“填写”该指针:
void reallocBig(inf *imginf, d ***array)
{
...
*array = realloc(...)
for (...)
(*array)[i] = ...
...
}
C FAQ有一个question about precisely your problem。您还应该注意,您当前的实现会泄漏数组中的所有先前条目。