Probleme : Tableau perd ses valeurs une fois sortie de la boucle

Probleme : Tableau perd ses valeurs une fois sortie de la boucle - C - Programmation

Marsh Posté le 30-12-2010 à 12:14:44    

Bonjour,

 

J'ai un problème, cela fait plusieurs jours que le bloque. J'ai une procédure qui est censé générer une matrice de codage sur 32 Bits pour l'algorithme de Reed-Muller (utilisé dans le codage d'images transmises par ondes radio).  
Lorsque le tableau  à deux dimension se voit affecté ses valeurs dans la boucle tout va bien, mais une fois sortie de la boucle, impossible de retrouver ses valeurs, le tableau contient des valeurs aléatoires, comme s'il n'avais pas encore été "affecté"...  voila le code (simplifié)

 
Code :
  1. void ReedMuller_32(int r){
  2. int *base;
  3. int b;
  4. int Max_Horz,Nb_Rep,Cord_X,Cord_Y,i,j;
  5. long double deux = 2;
  6. int Puissance_de_R = pow(deux,r) ;
  7. base = new int[Puissance_de_R * (r+1)];  // tab[i,j] = tab[i*j]  -- pour appel = tab[xi * i + xj]
  8. Max_Horz = Puissance_de_R;
  9. Nb_Rep = 1;
  10. for(Cord_Y=0;Cord_Y<Puissance_de_R+1;Cord_Y++){
  11.  Cord_X = 0;
  12.  b = 0;
  13.  for(i=0;i<Max_Horz;i++){
  14.   if (Nb_Rep==32){
  15.     if(b==0)
  16.      b=1;
  17.     else
  18.      b=0;
  19.   }
  20.   for(j=0;j<Nb_Rep;j++){
  21.    base[(Cord_X*Puissance_de_R) + Cord_Y] = b;
  22.    printf("%i",base[(Cord_X*Puissance_de_R) + Cord_Y]);
  23.    Cord_X++;
  24.   }
  25.   if(b==0)
  26.    b=1;
  27.   else
  28.    b=0;
  29.  }
  30.  printf("\n" );
  31.  Max_Horz = Max_Horz/2;
  32.  Nb_Rep = Nb_Rep * 2;
  33. }
  34. for(j=0;j<6;j++){
  35.  for(i=0;i<32;i++){
  36.   printf("%i",base[i*32 + j]);
  37.   printf(" " );
  38.  }
  39.  printf("\n" );
  40. }
  41. }
 

Voici une capture d'écran de l'execution. On voit bien le premier affichage en haut qui est correct, et le second en dessous ou les valeurs sont complêtements aléatoires comprises entre 0 et 254 (les tableaux de booléens en C sont en 8 bits?  :??: )

 

http://img502.imageshack.us/img502/65/execution.jpg

 

Merci de votre aide :sarcastic:


Message édité par freeskate63 le 30-12-2010 à 14:55:58
Reply

Marsh Posté le 30-12-2010 à 12:14:44   

Reply

Marsh Posté le 30-12-2010 à 13:07:56    

C'est pas du C.
Ou alors le C a diablement changé depuis la dernière fois que j'en ai fait.

Reply

Marsh Posté le 30-12-2010 à 13:47:31    

heu si c'est du C, j'utilise Microsoft visual C++ ...

 

C'est même du C++, mais je n'utilise pas les objets (du moins pas encore)...


Message édité par freeskate63 le 30-12-2010 à 13:49:03
Reply

Marsh Posté le 30-12-2010 à 14:08:50    

non tu ecris du caca. printf n'est pas une fontion C++ et new n'est pas en C.
 
pour ton probleme, tu sais que ^ en C c'est bitwise xor et pas puissance ?

Reply

Marsh Posté le 30-12-2010 à 14:09:56    

Tu nous montreras ou new et bool sont définis en C...
Et vu que tu as pas donné le code qui marche pas (car celui que tu as donné passe clairement pas à la compil, ça se voit à l'oeil nu), on va pas pouvoir te dire pourquoi ça marche pas (même si on s'en doute).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-12-2010 à 14:55:21    

Joel F a écrit :

non tu ecris du caca. printf n'est pas une fontion C++ et new n'est pas en C.
 
pour ton probleme, tu sais que ^ en C c'est bitwise xor et pas puissance ?


 
Merci, le problème venait simplement de la,  le signe ^ ne m'a pas sauté aux yeux car j'ai presque pas fait de c et n'est pas l'habitude que ce symbol ne sois pas utilisé pour les puissances.  
 

gilou a écrit :

Tu nous montreras ou new et bool sont définis en C...
Et vu que tu as pas donné le code qui marche pas (car celui que tu as donné passe clairement pas à la compil, ça se voit à l'oeil nu), on va pas pouvoir te dire pourquoi ça marche pas (même si on s'en doute).
A+,


 
Je viens de voir que bool est pour le C#, je vais utiliser des int à la place.
 pour le new je sais pas... Mais c'est la seul manière que j'ai trouvé pour instancier les tableaux avec comme taille une variable.
 
 
J'ai mis à jour mon code si jamais

Reply

Marsh Posté le 30-12-2010 à 16:19:54    

Avec Visual C++,  tu codes en C++.
Ce qui signifie que même en s'astreignant à une syntaxe qui ressemble à du C, tu coderas en C++ (type naturel char, casts obligatoires sur void*, etc)
 
Utilise un compilateur C pour coder en C. Et un compilateur C++ pour coder en C++.
 
La suite Visual ne propose pas de compilo C je crois, tu peux utiliser Code::Blocks avec mingw-gcc pour coder en C si tu veux.

Reply

Marsh Posté le 30-12-2010 à 17:41:10    


freeskate63 a écrit :


Je viens de voir que bool est pour le C#, je vais utiliser des int à la place.


 
en C++ aussi :o
 

freeskate63 a écrit :


 pour le new je sais pas


 
std::vector please

Reply

Marsh Posté le 02-01-2011 à 10:49:13    

Si on mets un fichier toto.c dans un projet Visual, il sera compile en C il me semble.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed