Basic_string:: _ S_construct null недействителен
Я читаю входной файл из командной строки.
int main(int argc, char **argv)
{
Scene myScene;
string filename = argv[1];
myScene = Parser(filename);
...
}
из другого файла я использую функцию парсера, которая дециберируется следующим образом:
Scene Parser(string filename)
{
string line;
ifstream myfile (filename.c_str());
...
return scene;
}
Я получаю сообщение об ошибке; terminate call после вызова экземпляра 'std:: logic_error' what(): basic_string:: _ S_construct null недействительно
Запрограммированный сигнал SIGABRT, Прервано.
Я искал ошибку. Я думаю, это из-за этих строк. Но я не могу найти настоящую причину. Кто-нибудь может мне помочь?
Ответы
Ответ 1
Это означает, что filename
имеет значение NULL в Parser
, возможно, потому, что вы не передаете какие-либо аргументы в свою командную строку программы.
Обязательно проверяйте, будет ли ожидаемое количество аргументов передано вашей программе. Например, вы можете сделать:
int main(int argc, char *argv[]) {
if (argc != NUMBER_OF_EXPECTED_ARGUMENTS) {
exit(EXIT_FAILURE);
}
// ...
string filename(argv[1]);
Scene myScene = Parser(filename);
// ...
}
Ответ 2
Возможно, вы забыли указать аргументы командной строки и в результате argv [1] равен NULL. Вы должны проверить, введен ли пользователь в аргументы командной строки. Например
int main(int argc, char **argv)
{
Scene myScene;
string filename;
if ( 1 < argc ) filename.assign( argv[1] );