2014-09-20 82 views
2

我收到了一個非常奇怪的錯誤,我無法環繞我的頭。使用System()運行腳本時發生Segementation故障

這裏是我的代碼,這是非常簡單的,只需要調用一個函數main中的呼叫系統()

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) 

林無言以對,是什麼原因造成這個!?

+0

我想提一提的是,如果我取消Function()並在main中運行system(「./myscript.sh」),它會順利運行而沒有分段錯誤 – 2014-09-20 10:30:31

回答

8

看起來問題在於你的function1被聲明爲返回string,但它不返回任何內容。 C++編譯器應該發出警告:

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

當函數返回時,調用者需要對函數返回的字符串執行清理操作。由於您沒有返回任何內容,因此這些操作會觸發未定義的行爲,最終導致分段錯誤。

添加return語句或將函數聲明爲void將解決該問題。

+0

omg我不相信我錯過了!我已經連續編寫了10個小時!謝謝您的幫助!! – 2014-09-20 10:53:56

+1

這就是我們不應忽視警告的原因,並可能將一些警告視爲錯誤。 – Ajay 2014-09-20 11:29:42

+0

@HadiEsper將來可以避免這種情況,使用'-Wall'選項進行編譯。 – GingerPlusPlus 2014-09-20 11:31:19