Member 12173907 Ответов: 3

Как избежать ошибок сегментации


Я всегда получаю ошибки сегментации, выполняя свои задания. На самом деле я использую отладчик для их решения, но я хочу знать, как мы должны избегать их?

Любая помощь будет оценена по достоинству.

Что я уже пробовал:

Обычно я стараюсь, но всегда трачу целый день на эту единственную строку кода... :-)

Philippe Mori

Напишите правильный код, и у вас не будет ошибки сегментации. Все очень просто.

3 Ответов

Рейтинг:
1

Jochen Arndt

Типичными ошибками начинающих, которые могут привести к ошибкам seg, являются:

Использование неинициализированных переменных (особенно для индексов массивов).
Всегда инициализируйте переменные.

Не проверяя возвращаемые значения функции.
Функции могут возвращать специальные значения, такие как NULL указатель или отрицательное целое число для указания ошибки. Или возвращаемые значения указывают на то, что значения, передаваемые обратно аргументами, недопустимы.
Всегда проверяйте наличие состояний ошибок и прерывайте выполнение при появлении ошибок.

Цикл до и включая длину массива.
Доступ к последнему элементу массива осуществляется с помощью length - 1.
Условия окончания цикла должны быть < length (нет <=).

Неправильная длина для массивов, использующих sizeof.
Не используйте sizeof для указателей динамически создаваемых массивов (это просто размер указателя).
Не забудьте разделить на размер элемента, когда элементы больше байта при определении длины фиксированных массивов (используйте sizeof(array) / sizeof(array[0])).

Изменение размеров литеральных массивов не во всех местах.
Использовать #define или sizeof оператор во всех местах, где используется длина массива.

Неправильное обращение с NULL завершенные строки.
Забыв выделить место для завершения NULL характер.
Забыв установить окончание NULL характер.

А может, и больше. Но вышеизложенное встречается довольно часто и встречается здесь, на КП, довольно часто.

Заключительные советы:
Установите максимальный уровень предупреждения компилятора. Некоторые из вышеперечисленных проблем, такие как унитализированные переменные, затем обнаруживаются компилятором.

Используйте статический анализатор кода, например Cppcheck - инструмент для статического анализа кода C / C++ [^].


Рейтинг:
1

Patrice T

Цитата:
ошибка сегментации

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


Рейтинг:
0

CPallini

Тщательное программирование - это способ избежать их. Как и любой другой C/C++ программист, вы должны освоить динамическое распределение памяти, указатели и тому подобное.