0

我是一个初学者,并且在动态内存分配方面遇到了很大的困难。如果有人可以帮助我解决这个问题,我将不胜感激。

我使用 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 则一直指向旧位置。

知道如何在每次重新分配后更新所有 Tptr。

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

最好的问候瓦贾哈特

4

1 回答 1

0

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

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

您的指针数组 TPtr 需要在 T 上的每个 realloc 之后重新填充。如果您不想自己执行此操作,请使用向量而不是数组和 realloc

于 2012-10-28T18:46:54.713 回答