2012-02-08 50 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