basic_string :: _ S_construct NULL无效错误修复必需

时间:2015-02-05 22:45:11

标签: c++

我正在编写一个代码,其中包括接受来自C ++命令行的输入。该程序不执行,并且gdb运行说“basic_string :: _ S_construct NULL无效”。以下是代码段:

任何人都可以看一下并帮我解决这个问题吗?

int main( int argc,char *argv[])
{

    std::string structure=argv[1];
    std::string sorshuf=argv[2];
    int size=atoi(argv[3]);
    int RunNum=atoi(argv[4]);

1 个答案:

答案 0 :(得分:0)

#include <iostream>
int main( int argc,char *argv[]) {
    std::string structure=argv[1];
}

如果您使用 no 参数输入并运行该程序,则会得到:

terminate called after throwing an instance of 'std::logic_error'
    what():  basic_string::_S_construct null not valid
    Aborted (core dumped)

这正是你所描述的。

如果你在运行时添加一个参数,问题就会消失。

因此,它是因为在运行时没有提供参数。

如果您已经超越了数组的末尾,那么您在NULL中获得argv[]的唯一方法就是,因为标准要求将其作为检测数据的一种方式结束(另一个当然是argc)。

因此,您需要重新考虑您为可执行文件提供足够参数的论点(如评论中所述) - 我认为您发现自己不正确。

我将启动,将以下代码放在main的开头:

std::cerr << "argc = " << argc << '\n';
if ((argc > 0) && (argv[1] == NULL)) std::cerr << "Urk! 1\n";
if ((argc > 1) && (argv[2] == NULL)) std::cerr << "Urk! 2\n";
std::cerr << "Past Urks\n";