SegFault ennuyante :s

SegFault ennuyante :s - C++ - Programmation

Marsh Posté le 11-02-2010 à 19:34:16    

Bonjour,
 
Voici mon code :

Code :
  1. // code c++
  2. // declaration du tableau
  3. unsigned short tab[nbCols][nbLig];
  4. // passage par adresse
  5. FillTab( (unsigned short **) tab);
  6. // fonction de remplissage du tab
  7. void FillTab(unsigned short ** tab) {
  8.    for(int i=0; i<nb; i++)
  9.       for(int j=0; j<nb2; j++)
  10.          tab[i][j] = p[i][j];
  11. }


Voilà en gros mon programme, j'ai un Tab à 2D que je passe par adresse à une fonction qui va le remplir.
A l'éxécution j'ai cette erreur :

Exception non gérée à 0x00b84db9 : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0xcccccccc.


Normal, il ne connait pas la taille de tab.
 
Comment faire pour rectifier cela ?
Merci.

Reply

Marsh Posté le 11-02-2010 à 19:34:16   

Reply

Marsh Posté le 11-02-2010 à 19:36:46    

std::vector ou boost::multi_array ou boost::array

Reply

Marsh Posté le 11-02-2010 à 19:55:42    

Il me semble que boost est une librairie, je dois codé en évitant ça.
 
Je ne connais pas vector, en quoi cela pourrait-il m'aider ?

Reply

Marsh Posté le 11-02-2010 à 20:06:22    

Heu, faudrait commencer par les bases du C, là.
 
"unsigned short  ** tab" ce n'est pas pareil que "unsigned short  tab[nbCols][nbLig];" (le warning que tu as supprimé avec ton cast, ce n'était pas juste pour faire te chier).
 
Bref, je déclarerais la fonction FillTab de la manière suivante :
 

Code :
  1. void FillTab(unsigned short tab[][nbLig])
  2. {
  3. }


 
Contrairement à ce que le prototype laisse penser, le tableau sera transmit par addresse et non par valeur.
 
Il faut aussi que nbLig ne soit pas une variable, dans le cas contraire, passe par la STL.
 
Ah et aussi en général, pour les tableaux à 2 dimensions, on utilise la première pour les lignes et la seconde pour les colonnes.

Message cité 1 fois
Message édité par tpierron le 11-02-2010 à 20:06:56
Reply

Marsh Posté le 11-02-2010 à 20:23:37    

En effet tpierron, merci ca marche super !
J'aurais pas crut que le tableau serait transmit par adresse et non par valeur comme le prototypage le laisse penser..
Bizarre.
@+

Reply

Marsh Posté le 11-02-2010 à 22:08:30    

tpierron a écrit :


Ah et aussi en général, pour les tableaux à 2 dimensions, on utilise la première pour les lignes et la seconde pour les colonnes.


 
Ca depends de ce que tu fais hein  ;)  

Reply

Marsh Posté le 13-02-2010 à 21:31:42    

d'où l'utilisation du terme "en général" j'imagine


---------------
.
Reply

Sujets relatifs:

Leave a Replay

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