Problème écriture Algorithme en C

Ethanfel -  
 Ethanfel -
Bonjour,

Je suis débutant en programmation C,
Je dois faire un algorithme dans le cadre de mes études, étant trop gourmand sous Matlab, je tente de le traduire en C.

Au départ je récupère deux tableaux présents dans des formats .txt, tout se passe bien.
J'importe les valeurs dans deux tables M et N. je fais un fprintf des tables, elles sont bonnes. Ensuite je crée une matrice A et je mets totues les valeurs à zéro et là, problème les 3 premières lignes de mon tableau M se mettent aussi à zéro. Par la suite quelque soient les modifications que j'opère sur la matrice A, les trois premières lignes de M sont aussi modifiées.

Voici mon code :
#include <stdio.h>

int main()
{
	FILE *ReadInput;
	
	int M[7][2]; 
	
	ReadInput = fopen("/Users/Documents/Comm Network/ASLinkTest.txt","r" ) ; 
	
	for (int i=1 ; i<8 ; i++) 
	{ 
		for (int j=1;j<3;j++)
		{ 
				fscanf(ReadInput,"%i",&M[i][j]);
		}
	} 
	
	fclose(ReadInput) ;
 	
	int N[8];
	
	ReadInput = fopen("/Users/Documents/Comm Network/ASListTest.txt","r" ) ;

	
	for (int i=1 ; i<9 ; i++) 
	{ 
			fscanf(ReadInput,"%i",&N[i]); 
	} 

	fclose(ReadInput) ;


Jusqu'ici tout va bien , et dès que je crée la matrice A, hop les trois premières lignes de M subissent les mêmes changements que sur A.
int A[8][8];
	for (int i=1;i<9;i++)
	{ 
		for (int j=1;j<9;j++)
		{	
			A[i][j]=0;
		}
	}
}


J'avoue que je ne comprends pas vraiment ce qui se passe ici.
Je remercie d'avance celui qui pourra éclairer ma lanterne.


2 réponses

youscoul Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   4
 
Je pense que t'as une alteration des données au niveau de ta memoire. Pour celà, le probleme est simple, essayes plutôt d'utiliser les pointeurs pour allouer dynamiquement de la mémoire. Tu seras sûr que deux tableaux ne partagerons pas les mêmes espaces. Là j'ai pas bcp de temps pour te faire ce code, mais cè juste des (2 au total) malloc pour chaque tableaux 2D. N'hesites pas à poser des questions. Courage
1
Ethanfel
 
Merci beaucoup,
Je vais essayer de voir ce que je peux faire avec malloc.
J'avais plutôt l'habitude de programmer en Java, je n'avais jamais rencontré ce genre de problème.
0
Ethanfel
 
J'ai essayé effectivement mon problème est résolu :)

Voici la solution pour déclarer la matrice 8x8 en bon et due forme :

int** A; 
  
 A=(int**)(malloc(8*sizeof(int*))); 
  
 for (int i=0;i<9;i++) 
 {  
  A[i]=(int*)(malloc(8*sizeof(int))); 
 }  
  
 for (int i=1;i<9;i++) 
 {  
  for (int j=1;j<9;j++) 
  {  
   A[i][j]=0; 
  } 
 } 


Merci beaucoup !
0
DasSium95 Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   135
 
D'après des sources perso les matrices ne se remplicent pas comme ça en C
0