私は初心者で、動的メモリ割り当てに非常に苦労しています。誰かがこの問題で私を助けることができれば、私は本当に感謝しています.
以下を使用して、malloc を使用して配列 Node にメモリを割り当てます。
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 を繰り返し設定します。
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 のサイズを増やし、*sptr をチェックすると、有効ではなくなり、実行時にセグメンテーション エラーが発生することがあります。*sptr が古い場所を指し続けている間に、realloc がメモリ ブロック全体を新しい場所に移動する場合があると思います。
すべての再割り当ての後にすべての Tptr を更新するにはどうすればよいでしょうか。
最初から大きなサイズの T を使用し、T の realloc を無効にすると、すべて正常に動作します。しかし、動的に増加する配列サイズで動作するようにしたいです。
よろしくワジャハット