我是初学者,在动态内存分配方面非常困难。如果有人能帮我解决这个问题,我将非常感激。
我使用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
答案 0 :(得分:0)
你对malloc的调用设置了T. 当你调用re-alloc时,你不能假设T将在同一个地方 由于Tptr在调用后设置为Tptr = T
T = (struct nodeT*) malloc( 256*sizeof(struct nodeT) );
指针数组TPtr需要在T上的每次重新分配后重新填充。 如果您不想自己这样做,请使用向量而不是数组和realloc