1

10 個のスレッドを作成して通常どおり実行するプログラムを作成しました。プログラムは正常に実行されていますが、最後にセグメンテーション エラーが発生します。この障害は何ですか? 何が原因で、どのように解決すればよいですか? 私のコードは次のとおりです。

#include<stdio.h>
#include<pthread.h>
void *print(void *num);

int main()
{
    pthread_t tid[10];
    int n,check;
    void *exitstatus;
    for(n=1;n<=10;n++)
    {
        check=pthread_create(&tid[n],NULL,print,(void *)&n);
        if(check=0)
            printf("thread created");
        pthread_join(tid[n],&exitstatus);
    }

    return 0;

} 

void *print(void *num)
{
    int i,*val=(int *)num;
    for(i=0;i<(5);i++)
        printf("Hello World!!!(thread %d )\n",*val);
}
4

2 に答える 2

7

あなたには多くの欠陥があります:

for(n=1;n<=10;n++) // No, The array starts from 0 and lasts on 9

これを試して

for(n=0;n<10;n++)

if(check=0) // No, this will assign 0 to check instead of compare it

これを試して

if(check==0)
于 2013-03-21T12:44:57.033 に答える
3

インデックスを超えて配列にアクセスしています。これは未定義の動作です。

配列t[10]は index で始まり、-t[0]で終わる必要がありますt[9]

for(n = 0; n < 10; n++) { 
 //your stuff
}

またcheck == 0、平等をチェックする方法です。check = 0に割り当て0ますcheck

したがって、コードは次のようになります。

#include<stdio.h>
#include<pthread.h>
void *print(void *num);

int main()
{
    pthread_t tid[10];
    int n,check;
    void *exitstatus;
    for(n = 0; n < 10; n++)
    {
        check=pthread_create(&tid[n], NULL, print, (void *)&n);
        if(check == 0)
            printf("thread created");
        pthread_join(tid[n], &exitstatus);
    }
    return 0;
} 

void *print(void *num)
{
    int i,*val=(int *)num;
    for(i = 0; i < 5; i++)
        printf("Hello World!!!(thread %d )\n", *val);
}

プログラミング スタイルに関するもう 1 つの重要な注意事項: 適切なインデントを使用し、空白を慎重に使用してください。適切なインデントと空白を使用すると、ほとんどのプログラミング エラーとバグを排除できます。forたとえば、ループ内の演算子の前後、および次のパラメーターの前後の関数呼び出し中のパラメーター間の 1 つの空白,

于 2013-03-21T12:49:50.603 に答える