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

时间:2012-10-26 19:02:45

标签: pointers malloc realloc

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

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

任何想法如何在每次重新分配后更新所有Tptr。

如果我从头开始使用大尺寸的T并禁用T的realloc,一切正常。但我希望它能够动态增加数组大小。

最诚挚的问候 Wajahat

1 个答案:

答案 0 :(得分:0)

你对malloc的调用设置了T. 当你调用re-alloc时,你不能假设T将在同一个地方 由于Tptr在调用后设置为Tptr = T

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

指针数组TPtr需要在T上的每次重新分配后重新填充。 如果您不想自己这样做,请使用向量而不是数组和realloc