2017-09-16 1 views
-2

J'essaie de plonger un peu dans la programmation C. J'essaye donc de créer un tableau 2-d en utilisant des doubles pointeurs et en l'initialisant avec des valeurs aléatoires. Cependant, durant la phase d'accès, il jette une erreur de segmentationL'initialisation de la matrice 2-D jette segfault

est ci-dessous un extrait rayé de mon code vers le bas:

int main(void){ 

// Memory allocation for arrays 

int size = 3; 

double **matrix = (double **)malloc(sizeof(double *)*size*size); 

int i, k; 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i][k] = ((double)rand())/1314.7; 
     } 
} 

return 0; 
} 

Pourriez-vous s'il vous plaît me montrer ce que je fais mal?

+0

http://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/ – NiVeR

+1

Ce que vous avez n'est * pas * un tableau 2D, alors essayez de ne pas l'initialiser comme un seul. –

+0

BTW, https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc?rq=1 – Jens

Répondre

-1

Ce pointeur à la table de pointeur, vous devez la table des doubles :)

double *matrix = malloc(sizeof(double)*size*size); 

int i, k; 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i * size + k] = ((double)rand())/1314.7; 
     } 
} 

ou pour **

double **matrix = malloc(sizeof(double *)*size); 

for(int i = 0; i < size; i++) 
    *(matrix + i) = malloc(sizeof(double) * size); 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i][k] = ((double)rand())/1314.7; 
     } 
} 

bien sûr dans le code réel, vous devez vérifier si malloc n'a pas échouer etc etc

+0

Aucun de cela votre spectacle (sans expliquer, btw.) Est un tableau 2D. OP veut un tableau 2D, il devrait donc en utiliser un. – Olaf

+0

Pas clair ce qu'il veut. J'ai vu '*' s et mallics. Donc, je suis allé le pointeur. @Olaf vous savez bien sûr mieux: D –

+0

Comment l'utilisation d'un pointeur/allocation dynamique empêche-t-elle d'utiliser un tableau 2D? – Olaf