one.index1=a;
...
free(a);
...
free(one.index1);
...
Ergo, double free.
void doo(int *b)
{
b = (int *) realloc(b, 5*sizeof(int));
return;
}
Когда вы передаете указатель на эту функцию, ее значение (которое является адресом) копируется в b, другой локальный указатель int,Теперь, когда вы перераспределяете пространство на 5 дюймов, оно меняет распределение пространства для заражения.Таким образом, ваше пространство уменьшается с 10 до 5 дюймов.
В соответствии с запросом OP, чтобы получить те же данные и отдельные указатели памяти, пространство должно быть выделено заново для нового указателя, так как указатель, в конце концов, простопеременная, содержащая адрес.Если вы выделите два отдельных блока, вы получите два отдельных адреса, которые могут быть освобождены по отдельности.