C:修改线程内的全局数组

时间:2014-10-19 17:32:52

标签: c arrays multithreading pointers binary-tree

我正在创建一个程序来创建一个可以访问唯一整数数组的线程二叉树。数组在主体中生成,并由函数内的线程修改。

线程参数的结构是:

typedef struct data{
    int *array; //Pointer to the global array
    int others;
}DATA

在主体中我有类似的东西:

main(){

   int a[18]= {1,3,4,5,6,8,6,5,4,3,5,6,2,5,7,4,5,8};
   struct data  *data = malloc(sizeof(data));
   data->array = a;
   function(data);
}

该函数是递归的,它生成两个线程,我想在子元素中复制数组的地址

function((void*)firstdata){
    pthread_t leftson;
    pthread_t rightson;
    struct data *data = firstdata;
    struct data  *dataleft = malloc(sizeof(data));
    struct data  *datarigh = malloc(sizeof(data));
    dataleft->array = data->array
    dataright->array = data -> array; 

    int i;
    printf( "\n");

    for (i = 0; i < 18; i++){
            printf( " %d ",*(dataleft->array+i));
    }
    printf( "\n"); //Print array through son

    pthread_create(&leftson,NULL,function,(void *)dataleft);
    pthread_create(&righttson,NULL,function,(void *)dataright);
}

这是由于指针我得到错误的地方,如果我尝试使用左儿子打印我得到分段错误而不打印任何东西,如果我尝试与正确的儿子,它打印数组然后得到一个错误如果我根本不打印,该功能会一直运行到没有错误。

我需要帮助才能理解如何操作数组。

我在创建数组时也尝试使用malloc()而没有很好的结果。

注意:此代码用于演示,如果尝试运行,将导致无限循环。

0 个答案:

没有答案