Segmentation fault (exit code 139) bei der Verwendung von pthread_join

Ich mache ein paar erste Schritte mit threads auf Linux-Systemen, und ich habe diesen Fehler, der tritt auf der Basis eines Programms, das bekommt n argument und erstellt n Anzahl der threads.

Hier ist der wichtige Teil des Codes:

Die Funktion des threads ausgeführt werden soll:

void* function(void* arg){
    int id = (long)arg;

    printf("Thread #%ld created!\n",id);

    pthread_exit(0);
}

Wichtiger Teil des Codes in die main Funktion

int main(int argc, char **argv){

    if(argc != 3){
        printf("Usage: %s <num> <exp>\n",argv[0]);
        exit(-1);
    }

    int num = atoi(argv[1]), exp = atoi(argv[2]);
    long i;
    pthread_t threads[num];
    pthread_attr_t attr;

    printf("Creating %d threads \n",num);

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);

    for (i = 0; i < num; i++) {
        pthread_create(&threads[i],&attr,function,(void*)i);
    }

    pthread_attr_destroy(&attr);

    for (i = 0; i < num; i++) {
        printf("Thread #%d is %ld\n", i, threads[i]);
    }

    for (i = 0; i < num; i++) {
        pthread_join(threads[num], NULL);
    }

}

Sehen, dass die Letzte for Schleife, mit der pthread_join - Funktion, wenn ich einen Kommentar endet das Programm fein (exit code 0), aber der Ausgang ist offensichtlich falsch, da nicht alle threads läuft function vor der main-Prozess beendet wird.

Wenn ich keinen Kommentar bekomme ich segmentation fault (core dumped) beim ausführen über den terminal auf meinem Linux-OS und Process finished with exit code 139 beim laufen in meiner IDE (CLion).

Konnte ich nicht finden, alles, was ich falsch gemacht habe, weil es ein sehr grundlegendes Programm, das nicht haben sollte, etwas schwer zu finden, was ist das problem, das den Fehler verursacht?

  • Tipp: "segmentation fault" und "Prozess beendet mit exit code 139" Synonym sind. 139 = 0x80 | 11, das ist das, was die shell gibt als exit-code, wenn das Programm ausgeführt wird, killed by signal 11, segmentation fault.
InformationsquelleAutor argamanza | 2016-05-17
Schreibe einen Kommentar