У меня возникли некоторые проблемы с повреждением памяти в довольно большом проекте по управлению некоторым научным оборудованием (около 6000 строк), и я не уверен, что является лучшим способом / инструментом для решения проблемы. Проект использует Qt 4.8 и построен на QtCreator и MinGW. Программа работает более или менее, но у меня есть некоторые проблемы со стабильностью. Иногда я получаю случайные сбои, но в некоторых случаях, когда я немного изменяю исходный код, программа падает с точно такой же позицией (которая работала ранее). Позиция, которую он выбрал на этот раз, выглядит следующим образом:
char stages2[1024];
sprintf(stages2, "M-511.DD.LOAD\nNOSTAGE");
Во второй строке выдается ошибка сегментации (SIGSEGV), когда я запускаю ее в gdb — что говорит мне, что у меня есть какая-то проблема с памятью программы, потому что я уверен, что эти две строки верны. Кроме того, «сайт аварии» изменяется в зависимости от точного исходного кода; Я даже видел сбои в библиотеках Windows, которые использует Qt.
Я рассмотрел несколько вариантов, чтобы найти причину проблемы, но столкнулся с некоторыми трудностями:
Я был бы очень признателен за несколько советов о том, какой самый перспективный способ, наконец, избавиться от этой ошибки.
Компилировать с оптимизацией и -Wall
(и, возможно, другие предупреждающие флаги), проверьте все предупреждения, чтобы убедиться, что ничего подозрительного не происходит.
Используйте такие инструменты, как valgrind, чтобы проверить snafus для управления памятью.
Других решений пока нет …