【发布时间】:2015-09-21 07:51:54
【问题描述】:
我遇到错误“Segmentation fault 11”,代码如下: 我创建了一个线程,它给参数一个结构。
我认为问题在于函数*MARIT 的声明。
对不起,我的英语不好,我是法国人。
struct parametres {
double *T;
int N; //taille
};
void *MARIT(struct parametres parametres)
{
int *somme =0;
float *moyenne = 0;
int i;
for(i = 0; i < parametres.N; i++)
*somme = *somme + parametres.T[i];
printf("somme : %d",somme);
*moyenne = (*somme/(parametres.N+0.0));
pthread_exit(moyenne);
}`
int main(int argc, char* argv[])
{
float temps;
clock_t t1, t2;
t1 = clock();
struct parametres params;
printf("Salut à toi !\n");
printf("Donnez la taille du tableau :" );
scanf("%d", ¶ms.N);
params.T = malloc( params.N * sizeof(double) );
int i = 0;
int nombre_aleatoire = 0;
for(i=0; i<params.N; i++){
nombre_aleatoire = (rand() % 1000) + 1;
params.T[i]=nombre_aleatoire;
}
pthread_t arith,quadrat,cubi;
if(pthread_create(&arith, NULL, MARIT, (void*)¶ms) != 0)
{
perror("pthread_create");
exit(1);
}
double *result=0;
pthread_join(arith, (void**)&result);
printf("le resultat du thread : %f",result);
return 0;
}
我不知道是什么问题。
【问题讨论】:
-
void *MARIT(struct parametres parametres) {-->void *MARIT(void* data) { struct parametres parametres = *data;。另外,删除somme和moyenne之前的所有星号(*)。 -
警告:不兼容的指针类型将“void (struct paramètres)”传递给“void *()(void *)”类型的参数在“pthread_create”行
-
帅哥,有一个错误:用不兼容类型'void'的表达式初始化'struct parametres'谢谢
-
哦。试试
void *MARIT(void* data) { struct parametres parametres = *(struct parametres*)data;然后 -
您是否删除了
somme和moyenne之前的所有星号?另外,尝试将moyenne设为double而不是float。不要忘记在程序末尾使用free(params.T);释放malloced 内存,以避免内存泄漏。
标签: c multithreading algorithm pointers