Как отладить ошибку basic_string ::_M_construct null not void?

#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 with nullptr или моральный эквивалент.

2. Вы используете нулевой указатель для инициализации строки, это UB . Вам нужно выполнить стандартные шаги отладки, чтобы сузить область, где это происходит. Хорошее руководство здесь: ericlippert.com/2014/03/05/how-to-debug-small-programs

3. Вы вызываете std::string конструктор со const char* значением NULL . Это происходит ГДЕ-ТО в вашем коде. Конечно, вы можете найти все места, где вы вызываете конструктор, и поместить несколько простых инструкций debug print, чтобы увидеть, где он может это делать.

4. С большой кодовой базой трудно точно определить проблему. — Нет, это не так. Это может быть миллион строк. Это очень целевое сообщение — каждый раз, когда генерируется исключение C , местоположение является одной из самых простых вещей для отладки и проверки. Отладчик и просмотр стека вызовов покажут вам, что именно вызывает эту ошибку.