Первые два значения массива списков становятся NULL, когда я расширяю массив - PullRequest
1 голос
/ 18 мая 2019

У меня есть массив списков, размер которого я хочу удвоить. Я использую 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 голосов
/ 18 мая 2019

Вы не понимаете, что такое второй аргумент 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));
...