2017-04-04 14 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ポインタでなければなりません。_ – LPs

+1

@LPs:それは持っています。私はそれを読んだが正しく処理していない:私はそれを読んだとき、私はこの要件が 'spawnlp()'にではなく 'spawnvp()'(配列をとる) )。それは私を愚かにするか、あるいは「人」が効果的でない援助ですか?私はあなたの意見をすでに知っていると思います。 – 7vujy0f0hy

答えて

5

引数リストの一部として渡されるNULLを終了していません。

ターミネータがなければ、引数リストの最後は認識されず、システムは無効なメモリ位置のアクセスのためにundefined behaviorを引き起こす読み取りを継続します。