"glibc free (): неверный следующий размер (быстрый)" на vector.push_back? - PullRequest
2 голосов
/ 02 сентября 2011

Когда я запускаю свою программу, она иногда вылетает и выдает ошибку: « Обнаружен glibc / pathtoexecutable: free (): недопустимый следующий размер (быстрый)»

Возврат приводит к функции-члену, которая просто вызывает векторную функцию push_back -

void Path::add(Position p) {path.push_back(p);}

Я пытался погуглить ошибку, и очень большая часть проблем заключается в том, что люди выделяют слишком мало памяти.Но как это могло произойти с std :: vector <>. Push_back?Что я могу проверить?Любая помощь приветствуется.

Ответы [ 2 ]

8 голосов
/ 02 сентября 2011

Возможно, вы где-то делаете недопустимую запись и уничтожаете контрольную информацию, хранящуюся в glibc для бухгалтерии.Таким образом, когда он пытается освободить вещи, он обнаруживает ненормальные условия (необоснованные размеры для освобождения).

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

Лучше всего использовать отладчик памяти.valgrind может быть началом (так как вы упомянули glibc).Ищите «неверная запись размера ...» перед сообщением glibc.

2 голосов
/ 02 сентября 2011

Как сказал @cniculat, попробуйте valgrind.

Другие инструменты, которые вы можете попробовать:

  • Поддержка отладки gcc stl.Если проблема в неправильном использовании контейнера STL, то компиляция с D_GLIBCXX_DEBUG и -D_GLIBCXX_DEBUG_PEDANTIC может выявить проблему.В случае обнаружения проблемы программа будет прервана на assert(), поэтому вы получите сообщение об ошибке на консоли.
  • Еще один вариант - использовать google tcmalloc .Он переопределяет malloc() / free().Просто свяжите ваше приложение с версией tcmalloc link, и это может обнаружить проблемы использования тумана.

Поддержка отладки STL и tcmalloc можно использовать в обычных сборках debug .Таким образом, вы можете работать как обычно, в то время как эти инструменты будут в фоновом режиме утверждать вас, если есть ошибка.

...