2010-08-18 4 views
0

J'essaie d'appeler des fonctions qui ajoutent des caractères à la mémoire tampon, puis les supprime après. mais je n'arrive toujours pas à appeler la fonction correctement. Je travaille sur Linux.processus de tampon partagé

ERROR: q_add makes an integer without a cast. 

Cela fait partie du code:

do { 
    printf("Enter shared buffer operation "); 
    printf("i(init)/a(add)/r(remove)/t(items)/d(delete)"); 
    scanf("%c%c", &op, &discard); 
    int a=1; 
    char n; 

    switch (op) 
    { 
     case 'i': 
       printf("Enter nnumber a leter here!"); 
       scanf("%c" &n) 
       q_add(a, &n); 
       break; 

     case 'a': 
       q_delete(); 
       break; 

     case 'r': 
       q_remove(a, &n); 
       break; 
     //------------------------------------------------------------------ 

La définition de q_add() dans le fichier approprié est:

void q_add(int n, char *x) 
{ 
    shbuf->count += n; 
    while (n-- > 0) 
    { 
     shbuf->buf[shbuf->inspos++] = *x++; 
     if (shbuf->inspos == QSIZ) 
      shbuf->inspos = 0; 
    } 
} 

Et cette fonction ne fonctionne pas vraiment; si je décommenter la sortie, je reçois une erreur:

void q_delete() 
{ 
    if (-1 == shmctl(shmid, IPC_RMID, 0)) 
    { 
     perror("Can't remove shared mem"); 
     //exit(1); 
    } 
} 

Répondre

4

Vous appelez la fonction:

int a; 
char n; 
.... 
q_add(a, n); 

mais la définition est la suivante:

void q_add(int n, char *x) 

Il attend un char * comme 2ème argument et vous envoyez un char.

3

q_add(1, &n);?

+0

J'ai essayé ceci, et il a retourné une erreur de segmentation, après l'exécution et la saisie de la valeur –

+0

Vous ne définissez jamais un à quoi que ce soit valide. C'est probablement pourquoi c'est un segfaulting. – JeremyP

+1

En regardant votre code, utilisez 'q_add (1, &n);' parce que vous avez seulement un char – JeremyP

Questions connexes