У меня есть массив списков, размер которых я хочу удвоить. Я использую 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.
TABLESIZE
элементов, то обращение ко всему, что находится за пределамиx[TABLESIZE-1]
, является неопределенным поведением. - person Paul Ogilvie   schedule 18.05.2019S=realloc(S, 2 * TABLESIZE * sizeof(HTHash));
вместо этого? - person Retired Ninja   schedule 18.05.2019realloc
перемещает блок памяти. Если связанные элементы фактически находятся в непрерывном массиве, вы можете использовать значения индекса массива в качестве ссылок вместо их адресов. - person Weather Vane   schedule 18.05.2019