LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Когда второй раз вызываешь add, q_size == 1, m_size == 1. list->q_size > list->m_size не выполняется и массив не расширяется. Потом ты пишешь во второй индекс и портишь кусок памяти сразу за выделенным. В этом и есть ошибка. Там хранятся служебные данные malloc-а, которыми пользуется realloc и следующей его вызов обнаруживает эту ошибку. Это тебе ещё повезло, бывает хуже.

Для исправления надо использовать >= (35 строчка).

И проверяй результат realloc-а на NULL. Совет про valgrind двачую.

Исходная версия Legioner, :

Когда второй раз вызываешь add, q_size == 1, m_size == 1. list->q_size > list->m_size не выполняется и массив не расширяется. Потом ты пишешь во второй индекс и портишь кусок памяти сразу за выделенным. В этом и есть ошибка. Там хранятся служебные данные malloc-а, которыми пользуется realloc и следующей его вызов обнаруживает эту ошибку. Это тебе ещё повезло, бывает хуже.

Для исправления надо использовать >= (35 строчка).

И проверяй результат realloc-а на NULL.