Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1477 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  SegFault ennuyante :s

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SegFault ennuyante :s

n°1965156
tabb
Posté le 11-02-2010 à 19:34:16  profilanswer
 

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.

mood
Publicité
Posté le 11-02-2010 à 19:34:16  profilanswer
 

n°1965159
Joel F
Real men use unique_ptr
Posté le 11-02-2010 à 19:36:46  profilanswer
 

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

n°1965165
tabb
Posté le 11-02-2010 à 19:55:42  profilanswer
 

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 ?

n°1965171
tpierron
Posté le 11-02-2010 à 20:06:22  profilanswer
 

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
n°1965173
tabb
Posté le 11-02-2010 à 20:23:37  profilanswer
 

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.
@+

n°1965201
Joel F
Real men use unique_ptr
Posté le 11-02-2010 à 22:08:30  profilanswer
 

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  ;)  

n°1965798
Glock 17Pr​o
Posté le 13-02-2010 à 21:31:42  profilanswer
 

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


---------------
.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  SegFault ennuyante :s

 

Sujets relatifs
[Probleme] Dynamic_cast<T>(x) - Unix Segfault[C++] Segfault à corriger
utilisation de mysql++ => Seg Fault !segfault quand tu nous tiens
Segfault ?[ C ] Archi-debutant segfault sur petit programme :-(
[XSL][JAVASCRIPT] Document.write => Segfault[MinGW/Boost.Thread] Segfault multi-threading
PERL : traquer une segfault 
Plus de sujets relatifs à : SegFault ennuyante :s


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR