Problème écriture Algorithme en C

Fermé
Ethanfel - 31 mars 2010 à 15:15
 Ethanfel - 31 mars 2010 à 16:20
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.


A voir également:

2 réponses

youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 4
31 mars 2010 à 15:24
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
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
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 mardi 30 mars 2010 Statut Membre Dernière intervention 13 avril 2016 134
31 mars 2010 à 15:22
D'après des sources perso les matrices ne se remplicent pas comme ça en C
0