2017-04-04 53 views
1

以下程序崩潰。我究竟做錯了什麼?簡單的代碼在C崩潰中產生一個進程。爲什麼?

#include <stdio.h> 
#include <process.h> 

int main() { 
    puts("Hello!"); 
    return spawnlp(0, "notepad.exe", "notepad.exe", "test.txt"); 
} 
+2

同[你昨天的問題(http://stackoverflow.com/questions/43187986/how-do-i-know-when-i-ought-to-free-strings-in-c-returned- by-library-functions):這個人擁有你所需要的一切:_Argv的最後一個成員必須是一個NULL指針._L – LPs

+1

@LPs:它具有它。我讀過它,但我沒有正確處理它:當我讀到它時,我認爲這個要求適用於'spawnvp()'(它接受一個數組)而不是'spawnlp()'(它帶有一個參數列表)。這是否使我變成傻瓜或是「人」無效的援助?我想我已經知道你的意見了。 – 7vujy0f0hy

回答

5

您錯過了作爲參數列表的一部分傳遞的終止NULL。

如果沒有終止,參數列表將不會被稱爲年底,系統將繼續閱讀這會導致undefined behavior由於無效的內存位置訪問。

相關問題