2014-11-24 44 views
-2

我必须做一个C项目,但我从来没有研究C.编译器抱怨“从不同大小的整数转换为指针”。你能否解释问题的性质以及我如何解决问题?从不同大小的整数转换为指针?

这里是我的代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <pthread.h> 
#include <fcntl.h> 
#include <time.h> 
#include <stdint.h> 
#include <pthread.h> //-lpthread commande 

FILE* resultat=NULL; //déclaration d'un fichier nommé resultat qui contiendra les résultats issus du calcul des 3 fonctions 

int T[199]; //déclaration d'un tableau de taille 199 en statique 

static void *MARIT (void* i) //fonction qui calcul la moyenne arithmétique 
{ 
    int s,j; 
    int M1=0; 

    //boucle qui calcul la moyenne arithmétique 
    for (j=0;j<=150;j++) 
    { 
     s=(j*M1+T[j]); 
     M1=s/(j+1); 
     fprintf(resultat," Moyenne 1: %d \n",M1);//on écrit le résultat dans le fichier nommé resultat 
    } 

    return NULL; 
} 

static void *MQUAD (void* i) //fonction qui calcul la moyenne quadratique 
{ 
    int s,j; 
    int M2=0; 

    //boucle qui calcul la moyenne quadratique 
    for (j=0;j<=150;j++) 
    { 
     s=s+((T[j])*(T[j])); 
     M2=sqrt(s/(j+1)); 
     fprintf(resultat," Moyenne 2: %d \n",M2); 
    } 

    return NULL; 
    s=0; 
} 

static void *SCUB (void* i) //fonction qui calcul la somme des nombres cubique 
{ 
    int s,j; 
    int M3=0; 

    //boucle qui calcul la somme des nombres cubique 
    for (j=0;j<=150;j++) 
    { 
     s=M3+((T[j])*(T[j])*(T[j])); 
     M3=s; 
     fprintf(resultat," Moyenne 3: %d \n",M3); 
    } 

    return NULL; 
} 

int main (int argc, char* argv[]) { 
    pthread_t tid1; //déclaration de 3 thread 
    pthread_t tid2; 
    pthread_t tid3; 

    int M1,M2,M3; 
    int f,i; 
    int N=199; 

    i=atoi(argv[1])-1; //remplace chaine de caractère par un entier (ici on demande à l'utilisateur d'entrer N) 

    srand(time(NULL)); // initialisation de rand 

    while (f<=N){ //Boucle qui permet de générer N nombres aléatoire stocké dans T 
     T[f]= rand()%100; //N est demandé à l'utilisateur pour savoir combien il souhaite générer de nombres aléatoire 
     printf("%i \n",T[f]); 
     f++; 
    } 

    resultat=fopen("Resultatthread1.txt","w+"); //Création du fichier Resultat 

    //creation des thread, 3 thread pour 3 fonctions 
    pthread_create(&tid1,NULL,MARIT,(void *)i); 
    pthread_create(&tid2,NULL,MQUAD,(void *)i); 
    pthread_create(&tid3,NULL,SCUB,(void *)i); 

    //Ici on attend la fin d'execution des 3 thread pour pouvoir terminer le programme 
    pthread_join(tid1,NULL); 
    pthread_join(tid2,NULL); 
    pthread_join(tid3,NULL); 

    return 0; 
    fclose(resultat); 
} 
+2

对于空行你有一个奇怪的恋物癖。 – 2014-11-24 16:50:37

+0

'i'是一个'int',而不是'int *',并且因为它从'argv'被赋予了一个值,它是否意味着一个'char *'? – IllusiveBrian 2014-11-24 16:52:16

+0

您的任何函数都没有使用'i'参数。只需传递'0'而不是'(void *)i',看看错误是否存在。无论如何,我们应该如何猜测哪条线产生了错误?你是否试图缩小错误的位置? – 2014-11-24 17:08:07

回答

0

我认为这是错误所在

pthread_create(&tid1,NULL,MARIT,(void *)i); 

最后一个参数,就是要一个指向线程任意数据块。你不能像这样施放任意的int。 YOu假设int与指针的大小相同。

相关问题