Как исправить ошибку "Указатель, являющийся realloc'd не был выделен" ошибка - PullRequest
0 голосов
/ 21 мая 2019

У меня есть структура, которая называется House, и она включает массив символов для окрестности. Я пытаюсь прочитать базу данных домов и создать массив для домов с таким же соседством. Чтение части работает нормально, но пока я создаю новый массив для окрестности, моя функция входит в цикл только 23 раза, находит первые 23 дома с той же окрестностью и выдает эту ошибку.

pro (4740,0x10d06f5c0) malloc: * ошибка для объекта 0x7ff724d00030: указатель, являющийся realloc'd, не был выделен pro (4740,0x10d06f5c0) malloc: * установить точку останова в malloc_error_break для отладки

typedef struct house{
  int id;
  int lotarea;
  char street[5];
  int saleprice;
  char neighborhood[10];
  int yearbuilt;
  int overallqual;
  int overallcond;
  char kitchenqual[3];
} House;



House* get_neighborhoods(House house, House* array) {
printf("Get neighborhoods of house with id %d\n", house.id);

House* temp = array;
int counter = 1;


House* newarray = malloc(sizeof(House));

if (newarray == NULL) {
    printf("Malloc error...");
}


while (temp != NULL) {
    if (!strcmp(temp->neighborhood, house.neighborhood)) {


        if (counter > 1) {
            realloc(newarray, sizeof(House) * counter);
        }

        copy_house(newarray + counter - 1, temp);
        print_house(newarray[counter - 1]);
        counter++;
    }

    temp++;
}

return newarray;

}

1 Ответ

2 голосов
/ 21 мая 2019

Вы должны присвоить возвращаемое значение из realloc. У вас есть

realloc(newarray, sizeof(House) * counter);

В секунду времени, когда вы вызываете его (в цикле), указатель, который вы ранее передали ему, уже был free d, но вы отбросили новое значение.

newarray = realloc(newarray, sizeof(House) * counter);

В идеале вы должны присвоить возвращаемое значение временной переменной, чтобы вы могли проверить, успешно ли realloc.

...