#c #string
#c #строка
Вопрос:
Итак, моя программа, которая длинная и большая, выдает эту ошибку при вызове SIGINT .
Проблема в том, что 1) Я не уверен, к чему относится ошибка. Что-то о строках? И 2) что еще более важно, сообщение debug не указывает мне ни на одну строку кода. С большой кодовой базой трудно точно определить проблему.
Любые советы о том, как отлаживать подобные сообщения?
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
Комментарии:
1. Если вы запустите свою программу в отладчике, она, вероятно, прервется на этой строке, и вы можете получить обратную трассировку. Ваша конкретная ошибка выглядит так, как будто вы создаете
std::string
withnullptr
или моральный эквивалент.2. Вы используете нулевой указатель для инициализации строки, это UB . Вам нужно выполнить стандартные шаги отладки, чтобы сузить область, где это происходит. Хорошее руководство здесь: ericlippert.com/2014/03/05/how-to-debug-small-programs
3. Вы вызываете
std::string
конструктор соconst char*
значением NULL . Это происходит ГДЕ-ТО в вашем коде. Конечно, вы можете найти все места, где вы вызываете конструктор, и поместить несколько простых инструкций debug print, чтобы увидеть, где он может это делать.4. С большой кодовой базой трудно точно определить проблему. — Нет, это не так. Это может быть миллион строк. Это очень целевое сообщение — каждый раз, когда генерируется исключение C , местоположение является одной из самых простых вещей для отладки и проверки. Отладчик и просмотр стека вызовов покажут вам, что именно вызывает эту ошибку.