2012-10-26 43 views
0

我是一名初學者,在動態內存分配方面非常困難。如果有人能幫助我解決這個問題,我會非常感激。如何在realloc移動該數組的存儲位置後更新數組指針並對其進行陣列移動該數組的內存位置

struct nodeT { 
int id; 
nodeT *parent, *T1, *T2; 
}; 

struct nodeT* T; 
T = (struct nodeT*) malloc(256*sizeof(struct nodeT)); 

Then in order to reference T, I use a an array of pointers to T, call it Tptr: 

struct nodeT** Tptr; 
Tptr = (struct nodeT**) malloc(256*sizeof(struct nodeT*)); 

在我的代碼,我填寫T個數據,然後我設置* TPTR = T反覆如下::

我使用分配用malloc一些存儲器到陣列節點

nodeT* s = &T[ 1*21 ]; 
s->id=23; 
s->T1=... 
s->T2=... 
s->parent=... 

然後

sptr = &Tptr[ 1*21 ]; 
*sptr=s; 
and it works fine. 

但有時候,當我打電話realloc的增加T的大小,然後我檢查*特徵碼,它不再有效,我在運行時遇到分段錯誤。我認爲realloc有時可能會將整個內存塊移到新的位置,而* sptr會一直指向舊的位置。

任何想法如何在每次realloc後更新所有Tptr。

如果我從一開始就使用大尺寸的T並禁用T的realloc,那麼一切正常。但我希望它能夠動態增加數組大小。

問候 Wajahat

回答

0

您對malloc調用設置T. 當你調用重新頁頭,你不能假設T將在同一個地方 由於TPTR設置TPTR = T調用

T = (struct nodeT*) malloc(256*sizeof(struct nodeT)); 

您的指針數組TPtr一樣需要在T. 每次的realloc後重新填充如果你不想做這自己,用向量而不是數組和realloc