当我扩展数组时,列表数组的前两个值变为NULL

时间:2019-05-18 13:27:18

标签: c realloc

我有一个列表数组,我希望将其大小加倍。我使用realloc,当我开始填充新的数组元素时,起始元素开始变为NULL,并且我无法更改其值。

int x;
Heads=realloc(Heads, TABLESIZE * sizeof(struct HTLink));
S=realloc(S, TABLESIZE * sizeof(HTHash));
for(x=TABLESIZE;x<TABLESIZE*2;x++)
{
    S[x]=(HTNode *)malloc(sizeof(HTNode));
    S[x]->Key=EmptyKey;
    S[x]->Next=NULL;
    Heads[x]=*S[x];
}
TABLESIZE*=2;
return S;

运行此代码后,S [2]和更高的值是正常的,但S [0]和S [1]为NULL

1 个答案:

答案 0 :(得分:0)

您对realloc的第二个参数感到困惑:

  

void* realloc (void* ptr, size_t size);

     

size:内存块的新大小,以字节为单位。

您正在这样做:

S=realloc(S, TABLESIZE * sizeof(HTHash));
for(x = TABLESIZE; x < TABLESIZE * 2; x++)

这表明您认为realloc()将通过第二个参数扩展数组的大小。更改为:

S=realloc(S, 2 * TABLESIZE * sizeof(HTHash));