多线程数组的分段错误

时间:2018-05-23 17:28:42

标签: c linux segmentation-fault debian

我正在尝试在c中制作多线程数组排序程序。但是当我运行程序时,我收到“分段错误”错误。 有人可以帮忙吗? 我应该改变什么?第一个数组应该是300,另一个应该是500.我们首先分别对序列进行排序。合并后的2个排序序列。我使用“gcc -pthreads -0 soru1 soru1.c”和“./soru1”命令。

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#define size 800

int orginal_dizi[size], dizi1[300], dizi2[500], dizi3[size];
int sayi,a=1;

int boyutbul(int *the)
{
    int number=-1;
    while(the[++number]!='\0'){}
    return number;
}

void*runner(void *param)
{
    int temp,i,k;
    int *bolum = param;
    sayi = boyutbul(bolum);
    printf("\n----------unsorted %d. array-----------\n\n",a);
    for(i=0; i<sayi;i++)
    printf("%d\n", bolum[i]);

    for(i=0; i<sayi;i++)
    {
        for(k=0; k<(sayi-i-1);k++)
        {
            if(bolum[k]>bolum[k+1])
            {
                temp=bolum[k];
                bolum[k]=bolum[k+1];
                bolum[k+1]=temp;
            }
        }
    }
    printf("\n----------sorted %d. array-----------\n\n",a);
    for(i=0; i<sayi;i++)
    printf("%d\n", bolum[i]);
    a++;
    pthread_exit(0);
}

int main()
{
    pthread_t tid1,tid2, tid3;
    int i=0;
    while(i<size)
    {
        int yenisayi=1+rand()%1500;
        int aynimi=0, j=0;
        while(j<i)
        {
            if(orginal_dizi[j]==yenisayi)
            {
                aynimi=1;
                break;
            }
        j++;
        }
        if(aynimi)
        continue;
        orginal_dizi[i]=yenisayi;
        i++;
    }
    for(i=0;i<size;i++)
    {
        if(i<(300))
        {
            dizi1[i]=orginal_dizi[i];
        }
        else
        {
            dizi2[i-(500)-1]= orginal_dizi[i];
        }
    }
    pthread_create(&tid1,NULL,runner,(void *)dizi1);
    pthread_join(tid1,NULL);

    pthread_create(&tid2,NULL,runner,(void *)dizi2);
    pthread_join(tid2,NULL);

    for(i=0; i<size;i++)
    {
        if(i<300)
        {
            dizi3[i]=dizi1[i];
        }
        else
        {
            dizi3[i]=dizi2[i-500];
        }
    }

    pthread_create(&tid3,NULL,runner,(void *)dizi3);
    pthread_join(tid3,NULL);

    FILE *fp;
    if((fp=fopen("son.txt","w"))== NULL)
    printf("Dosya acilamadi.");

    for(i=0;i<size;i++)
    {
        fprintf(fp, "%d\n", dizi3[i]);
    }
    fclose(fp);
    return 0;
}

0 个答案:

没有答案
相关问题