realloc无法从其他函数访问新大小

时间:2012-02-08 18:07:59

标签: c arrays 2d realloc

我尝试使用**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);

格尔茨。

1 个答案:

答案 0 :(得分:4)

C是一种按值传递的语言。您的reallocBig函数无法修改调用者中数组的值。您需要更改它以获取d ***参数,并在函数中“填写”该指针:

void reallocBig(inf *imginf, d ***array)
{
 ...
   *array = realloc(...)
   for (...)
      (*array)[i] = ...
 ...
}

C FAQ有一个question about precisely your problem。您还应该注意,您当前的实现会泄漏数组中的所有先前条目。