簡體   English   中英

C Unix中的分段錯誤(核心轉儲)

[英]Segmentation fault (core dumped) in C Unix

我必須創建一個從命令行獲取n個參數arg1,arg2 ..... argn的程序,創建n個線程,並且每個線程都將讀取文本文件argi並以相反的順序打印偶數行。

問題是我的程序創建了線程,完成了線程,但實際上他什么也沒做。 他只打印一些隨機字符,每次運行時都不同(我認為是內存中的字符)。

下面是我的代碼:

#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLINE 100
pthread_t myThread[10];
pthread_mutex_t myMutex;

void * fileprint(void * numei) {
    printf("Thread: %ld ...> %s\n", pthread_self(), (char*)numei);
    FILE *fi;
    char line[MAXLINE], *p;
    pthread_mutex_lock(&myMutex);
    int k=0;
    fi = fopen((char*)numei, "r");
    for ( ; ; ) {
        k++;
        p = fgets(line, MAXLINE, fi);
        if (p == NULL) break;
        line[strlen(line) - 1] = '\0';
        if(k %2 ==0){
            for(int j=strlen(line);j>=0;j++){
                printf("%c", line[j]);
            }
        printf("%c","\n");
        }
    }

    fclose(fi);

    printf("Finished thread: %ld ...> %s\n", pthread_self(), (char*)numei);
    pthread_mutex_unlock(&myMutex); 

}


int main(int argc, char* argv[]) {
    pthread_mutex_init(&myMutex, NULL); 
    printf("I'm the father...\n");  

    int i;
    for (i = 1; argv[i]; i++) {
        pthread_create(&myThread[i], NULL, fileprint, (void*)argv[i]);
        printf("Created thread: %ld ...> %s\n", myThread[i], argv[i]);
    }


    for (i = 1; argv[i]; i++) {
        pthread_join(myThread[i], NULL);    
    }

    printf("I'm still the father...\n");


    pthread_mutex_destroy(&myMutex);

    return 1;
}

那么,誰能告訴我這是什么問題? 我嘗試了很多修改的東西,但是什么也沒做...

如果向后移動字符串,則必須遞減循環內的索引( j-- )。 另外,您應該從strlen(x)-1

這行是不正確的:

printf("%c","\n");

%c的操作數必須是char ,而不是char* 應該是:

printf("%c",'\n');

要么:

printf("%s", "\n");

要么:

printf("\n");

但是,我認為這不會導致分段錯誤,而只會導致打印隨機字符。

for (i = 1; argv[i]; i++) {

您也可以使用“ argc”,它是arg計數器。

 printf("Thread: %ld ...> %s\n", pthread_self(), (char*)numei);
FILE *fi;
char line[MAXLINE], *p;
pthread_mutex_lock(&myMutex);

在您的fileprint(...)中,將printf(...)放在互斥鎖后面,否則其他線程可能會中斷它,並且您在輸出中得到一半打印的奇怪句子。

制造商

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM