2017-04-23 1 views
0

J'essaie de vérifier si l'index d'un tableau a une valeur ou non.comparaison entre pointer et entier ('int' et 'void *') - C

void * cols; 
... 
... 

if (((int*)cols)[1]==NULL){ 
      counter++; 
      columns++; 

    } 
else 
{ 
    value=((int*)cols)[1]; 
      fprintf(f, "Validation result from process id: %u. :column %d is invalid\n", (unsigned int)thread_10,value); 

} 

cela me donne l'avertissement "comparaison entre pointeur et entier ('int' et 'void *')". Qu'est-ce que je fais mal ? comment puis-je vérifier si l'index est nul ou non? Aussi je ne peux pas vérifier 0 parce que 0 est une valeur valide dans mon cas signifiant si un index contient la valeur 0 qui signifie son valide.

+1

pointeurs ne peuvent être 'null'. '((int *) cols) [1]' est un 'int', pas un pointeur. Et il n'y a pas de "variable vide", donc vous ne pouvez pas vérifier si un tableau a une valeur assignée ou non. Vous, le programmeur, devez suivre cela. –

Répondre

1

cols est un pointeur. Après le lancer avec int * il est toujours un pointeur, mais maintenant vous le regardez comme un pointeur vers int. En écrivant ((int*)cols)[1] vous avez pris votre void* cols, l'avez casté int* et ensuite déréférencé, ce qui signifie que vous regardez maintenant un int et c'est pourquoi vous ne pouvez pas vérifier NULL.

(int*)cols pourrait être NULL, ou toute autre adresse en est ainsi la variable que vous devriez vérifier et ((int*)cols)[1] est la valeur int placée dans l'adresse cols {some address} + sizeof(int)

Ainsi, if (((int*)cols)[1]==NULL) devrait être si (cols)==NULL){il n'a pas d'importance si elle est void* ou int* lors de la vérification de NULL} et value=((int*)cols)[1]; est très bien