2012-02-08 49 views
0

我试图增加**array的大小realloc我用malloc创建。 我承诺**array我想增加一个函数的大小。 这里是其增加的大小的部分:realloc无法从其他功能访问新的大小

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循环。 随着循环的第一次我走过高度,在这里我得到的问题。

如果循环计数器是(imginf->height /2)我跑出阵列。宽度的一切工作正常。

出了什么问题?特别是,为什么我可以填充阵列?

编辑

在这里,函数定义用于保存:

void Save(char * newname, inf imginf, d **array); 

d与3个无符号字符一个结构。

这里定义为realloc函数:

void reallocBig(inf *imginf, d **array); 

格尔茨。

+1

请显示您的功能签名。这听起来像是你有一个传递值的问题。 – 2012-02-08 18:13:40

+0

请参阅我的**编辑**,是你的意思?足够?谢谢。 – hofmeister 2012-02-08 18:21:33

回答

4

C是一种传值语言。你的reallocBig函数不能修改调用者数组的值。你需要改变它采取d ***参数,以及“填充”的功能指针:

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

的C常见问题有question about precisely your problem。你也应该注意到你当前的实现泄漏了数组中所有的前面的条目。

+0

Ohhhhhh是的,你是如此的正确:)。我做了'inf'的洞时间......谢谢,我没有看到我的错误。 – hofmeister 2012-02-08 18:53:10