Warum erhalte ich einen Segfault, wenn ich die Signatur von main ändere?

Ich versuche meine Füße in C zu bekommen und habe dieses Programm geschrieben, das an einer zufälligen Stelle ein KB meines RAM anzeigt. Hier ist der Code, und es funktioniert gut:

#include <stdio.h>

int main(){
    char *mem;
    for(int i =0; i < 1024; i++){
        mem++;
        printf("%c", *mem);
    }
    return 0;
}

Danach habe ich den Code wie folgt geändert und bekomme jedes Mal, wenn ich mein Programm starte, Segfaults:

#include <stdio.h>


// Just added this signature
int main(int argc, char *argv[]){
    char *mem;
    for(int i =0; i < 1024; i++){
        mem++;
        printf("%c", *mem);
    }
    return 0;
}

Meine Spinnengefühle sagen mir, dass die Segfaults, die ich erhalte, zufällig sind und auch im ersten Beispiel verursacht werden sollten, aber das wiederholte Ausführen der verschiedenen Programme lässt sie wie vorhersehbares Verhalten aussehen.

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Antworten auf die Frage(8)

Ihre Antwort auf die Frage