Двойная ошибка realloc...?

У меня есть функция, которая используется для расширения массива (графика) и добавления нового значения в конце. Первый запрос к функции проходит нормально, но что-то идет не так, когда я делаю это во второй раз...

Код:

struct station *addStation(struct station *graph, struct station newStation, size_t  *stationCount){
  size_t newCount = *stationCount+1;

  graph = realloc(graph, newCount*sizeof(struct station));
  *stationCount = newCount;

  graph[*stationCount] = newStation;

  return graph;
}

и запрос:

  Station *graph;
  graph = malloc(146*sizeof(Station));

  graph = loadStations(graph, &stationCount);

  Station newStation = graph[0]; // Dummyvalue

  printf("StationCount:%d\n",stationCount);

  graph = addStation(graph, newStation, &stationCount);

  printf("StationCount:%d\n",stationCount);

  graph = addStation(graph, newStation, &stationCount);

Из-за второй строки graph = addStation... я получаю некоторую ошибку вывода памяти в терминале:

StationCount: 146 StationCount: 147 reseplanerare: malloc.c: 2369: sysmalloc: Утверждение `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) *) 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__buildin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)'не удалось. Прервано (SIGABRT) (печать из памяти создана)

Я не понимаю, почему это происходит...

1 ответ

С-массивы начинаются с нуля, так graph имеет действительные индексы [0..newCount-1]

graph[*stationCount] = newStation;

пишет за пределами вашей выделенной памяти. Это приводит к неопределенному поведению. Я предполагаю, что в вашем случае это повреждение защитного слова, используемого менеджером кучи для обнаружения именно такого рода повреждения памяти.

Вы можете исправить это, изменив индекс массива, в который вы пишете:

graph[newCount-1] = newStation;
Другие вопросы по тегам