Jochen Arndt
Типичными ошибками начинающих, которые могут привести к ошибкам seg, являются:
Использование неинициализированных переменных (особенно для индексов массивов).
Всегда инициализируйте переменные.
Не проверяя возвращаемые значения функции.
Функции могут возвращать специальные значения, такие как NULL
указатель или отрицательное целое число для указания ошибки. Или возвращаемые значения указывают на то, что значения, передаваемые обратно аргументами, недопустимы.
Всегда проверяйте наличие состояний ошибок и прерывайте выполнение при появлении ошибок.
Цикл до и включая длину массива.
Доступ к последнему элементу массива осуществляется с помощью length - 1
.
Условия окончания цикла должны быть < length
(нет <=
).
Неправильная длина для массивов, использующих sizeof
.
Не используйте sizeof
для указателей динамически создаваемых массивов (это просто размер указателя).
Не забудьте разделить на размер элемента, когда элементы больше байта при определении длины фиксированных массивов (используйте sizeof(array) / sizeof(array[0])
).
Изменение размеров литеральных массивов не во всех местах.
Использовать #define
или sizeof
оператор во всех местах, где используется длина массива.
Неправильное обращение с NULL
завершенные строки.
Забыв выделить место для завершения NULL
характер.
Забыв установить окончание NULL
характер.
А может, и больше. Но вышеизложенное встречается довольно часто и встречается здесь, на КП, довольно часто.
Заключительные советы:
Установите максимальный уровень предупреждения компилятора. Некоторые из вышеперечисленных проблем, такие как унитализированные переменные, затем обнаруживаются компилятором.
Используйте статический анализатор кода, например Cppcheck - инструмент для статического анализа кода C / C++ [^].