2017-04-04 2 views
1

Das folgende Programm stürzt ab. Was mache ich falsch?Einfacher Code, der einen Prozess in C erzeugt, stürzt ab. Warum?

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

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

Das gleiche wie [Ihre Frage von gestern] (http://stackoverflow.com/questions/43187986/how-do-i-know-when-i-ought-to-free-strings-in-c-returned- by-library-functions): Der Mann hat alles was du brauchst: _Das letzte Mitglied von argv muss ein NULL Zeiger sein ._ – LPs

+1

@LPs: Es hat es. Ich habe es gelesen, aber ich habe es nicht richtig verarbeitet: als ich es gelesen habe, nahm ich an, dass diese Anforderung auf 'spawnvp()' (die ein Array verwendet) und nicht auf 'spawnlp()' angewendet wird (was eine Argumentliste benötigt)). Macht es mich zum Narren oder ist "Mann" eine ineffektive Hilfe? Ich schätze, ich kenne deine Meinung schon. – 7vujy0f0hy

Antwort

5

Sie verpassen den abschließenden NULL, der als Teil der Argumentliste übergeben werden soll.

Ohne diesen Terminator wird das Ende der Argumentliste nicht bekannt sein, das System wird weiterhin lesen, was undefined behavior aufgrund des Zugriffs auf ungültige Speicherorte verursacht.