使用System()运行脚本时出现分段错误

时间:2014-09-20 10:28:43

标签: c++ segmentation-fault

我得到一个非常奇怪的错误,我无法绕过头。

这是我的代码,很简单,我只是在main函数中调用一个函数System()

string function1()
{
    cout << "Running my script... " << endl;
    system ("./myscript.sh");
    cout << "Done Running my script... " << endl;
}

int main()
{
    cout << "running function"  << endl;
    function1();
    cout <<"done"<< endl;
return 0;
}

它运行的脚本什么都不做(为了简化问题),它只是回应

#!/bin/bash
#UnMount Script

echo "HELLO THERE"

事情是,一旦它退出Function(),就会立即产生分段错误!

这是我的输出:

running function
Running my script... 
HELLO THERE
Segmentation fault (core dumped)

我一无所知,造成这种情况的原因是什么??

1 个答案:

答案 0 :(得分:8)

看起来问题是您的function1被声明为返回string,但它不会返回任何内容。 C ++编译器应该发出警告:

warning: control reaches end of non-void function [-Wreturn-type]

当函数返回时,调用者需要对函数返回的字符串执行清理操作。由于您没有返回任何内容,因此这些操作会触发未定义的行为,最终导致分段错误。

添加一个return语句或将该函数声明为void将解决问题。