2017-10-08 15 views
-1

Je veux multiplier les matrices. Je crée la matrice par malloc() fonction. Index (variable nommée i) montre NULL, au lieu du numéroindex montre NULL à l'intérieur pour la boucle

int** matrix_a = (int**)malloc(lines * sizeof(int*)); 
for (int i = 0; i < lines; i++) { 
    if (i == NULL) 
     printf("'i' is NULL!"); 
    matrix_a[i] = (int*)malloc(trans * sizeof(int*)); 
} 

Sortie:

'i' is NULL!

Erreur:

Unhandled exception at 0x00007FF6003C35BB in MPI_C.exe: 0xC0000005: Access violation writing location 0xFFFFFFFFABA57A00.

+2

Que voulez-vous accomplir avec 'i == NULL'? – pzaenger

+0

Une langue propre serait appréciée. –

+1

Ne pas lancer le résultat de 'malloc()'. – melpomene

Répondre

1

Il n'a pas de sens de comparer non -pointes à NULL. La macro NULL se développe en une constante entière 0, éventuellement convertie en (void *).

Dans le premier cas, votre code vérifie simplement if (i == 0), ce qui est vrai lors de la première itération de la boucle. Dans le dernier cas, vous faites if (i == ((void *)0)), dont votre compilateur devrait se plaindre car c'est une erreur de type. Utilisez uniquement NULL pour les valeurs de pointeur et non pour les nombres.