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