Pointers 在realloc移动数组的内存位置后,如何更新指向该数组元素的指针数组

Pointers 在realloc移动数组的内存位置后,如何更新指向该数组元素的指针数组,pointers,malloc,realloc,Pointers,Malloc,Realloc,我是一个初学者,在动态内存分配方面真的很难。如果有人能帮我解决这个问题,我将非常感激 我使用malloc将一些内存分配给数组节点,使用: 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 poin

我是一个初学者,在动态内存分配方面真的很难。如果有人能帮我解决这个问题,我将非常感激

我使用malloc将一些内存分配给数组节点,使用:

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时,它不再有效,我在运行时得到一个分段错误。我认为realloc有时可能会将整个内存块移动到一个新位置,而*sptr会一直指向旧位置

知道如何在每次realloc之后更新所有Tptr吗

如果我从一开始就使用一个大的T,并为T禁用realloc,那么一切都可以正常工作。但我希望它能够处理动态增加的数组大小

致意
Wajahat

您对malloc的呼叫设置为T。 当你调用re alloc时,你不能假设T在同一个地方 由于Tptr在调用后设置为Tptr=T

T =  (struct nodeT*) malloc( 256*sizeof(struct nodeT) );
在T上的每个realloc之后,需要重新填充指针数组TPtr。 如果您自己不想这样做,请使用向量而不是数组和realloc