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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Besoin d'aide en C

n°2001065
Sve@r
Posté le 11-06-2010 à 22:19:01  profilanswer
 

Reprise du message précédent :

ptitchep a écrit :

Vous croyez qu'on a fait peur à Petiois à force de dire que son prof est nul ou bien qu'il a réussi son exercice?
 

Lan Wezel a écrit :


 
Peux-tu m'expliquer le comportement suivant alors :  
 
Attention code vraiment crado pour mettre en évidence le comportement des vectors.
 

Code :
  1. int main(int argc, char* argv[]){
  2.   vector<int> v;
  3.   for(int i = 0 ; i < 5; i++)
  4.     v.push_back(10*i);
  5.   v[-1] = 42; // instruction critique
  6.   v[-2] = 3;
  7.   v[5] = 4;
  8.   }
  9.   return 0;
  10. }


 
Provoque l'envoi d'un SIGABRT lors de la désallocation du vector. Par contre si l'on ne touche pas à l'indice -1 (même en modifiant le -2 ou le size+1) le programme s'exécute et se termine correctement.
Donc on peut toucher à tous les indices sans provoquer de problème (enfin faut le dire vite) sauf l'indice -1.


 
 

Joel F a écrit :

tu ecrases simplement le pointeur de fin du vector qui est stockée à coté du pointeur de début. Aucun rapport avec stocker des trucs en v[-1].
 
RTFM



 
Là Petiois a maintenant vraiment de quoi avoir peur. Je pense même que c'est susceptible de le dégoûter du C [:petrus75]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 11-06-2010 à 22:19:01  profilanswer
 

n°2001081
Joel F
Real men use unique_ptr
Posté le 12-06-2010 à 00:16:45  profilanswer
 

très certainement [:petrus75]


Message édité par Joel F le 12-06-2010 à 00:16:57
n°2001109
Un Program​meur
Posté le 12-06-2010 à 10:08:07  profilanswer
 

Lan Wezel a écrit :

Peux-tu m'expliquer le comportement suivant alors

 

Tu fais quelque chose d'interdit, les conséquences sont imprévisibles.

 

(En passant, stocker quelque chose dans le mot précédant immédiatement la zone retournée est en effet une technique courante des allocateurs; mais ce n'est pas la seule possible -- certains algorithmes se débrouillent très bien avec uniquement l'adresse et d'autres mettent volontairement l'info ailleurs pour éviter que ce genre d'accès en dehors des bornes ne détruisent leurs données).

 
Joel F a écrit :

tu ecrases simplement le pointeur de fin du vector qui est stockée à coté du pointeur de début.

 

Il y a des vectors qui utilisent la même technique que les strings?  (Ne pas faire d'allocation dynamique en dessous d'une certaine taille en utilisant une zone mémoire dans l'objet même).  

 
Citation :

RTFM

 

J'espère bien que le manuel n'en dis pas plus que moi, même si c'est avec d'autres mots.

Message cité 1 fois
Message édité par Un Programmeur le 12-06-2010 à 10:08:36

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2001113
Joel F
Real men use unique_ptr
Posté le 12-06-2010 à 10:41:39  profilanswer
 

Un Programmeur a écrit :


Il y a des vectors qui utilisent la même technique que les strings?  (Ne pas faire d'allocation dynamique en dessous d'une certaine taille en utilisant une zone mémoire dans l'objet même).  


 
Peu voire pas du tout. Toutes les grosses implantations sont basées sur le triplet de pointeurs + allocateurs à base de new.
 

n°2001288
Lan Wezel
Posté le 13-06-2010 à 15:01:44  profilanswer
 

Ah d'accord, donc les vectors utilisent bien l'indice -1.
 
Mais non il n'y a pas de quoi le dégouter là. J'ai déjà vu bien pire...

n°2001322
Joel F
Real men use unique_ptr
Posté le 13-06-2010 à 17:54:50  profilanswer
 

non non non il ne l'utilise pas [:pingouino] tu ecris du code qui n'est pas défini par le standard. Chez moi par exemple, il en se passe rien, c'ets un comportement indéfini ...

n°2001417
Lan Wezel
Posté le 14-06-2010 à 11:07:49  profilanswer
 

Ah ok d'accord, en fait je pensais cela car j'avais rencontré ce comportement dans un code que l'on m'avais filé à débugger et où le mec jonglait un peu dans tous les sens avec ses indices. Il a bien fallu qu'il y en ait un qui vaille -1 a un moment et j'ai mis pas mal de temps à comprendre l'erreur car on ne la voit que lors de la désalloc.
 
Merci pour vos éclairages

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[R/Java/C++] Utiliser le moteur de rendu graphique R dans une appli[C] Probleme swap liste double chainée
Aide pour un slideshow (flash surement) avec changement background[C] Allumer LED avec PIC18F4580
Débutant aide C++Aide sur un Group by
[Objective-C] Gestion de la mémoireBesoin d'aide pour mon prog en C#
un mini projet en C (j ai besoin d aide)[ C ] Besoin d'aide pour afficher l'heure en temps réel
Plus de sujets relatifs à : Besoin d'aide en C


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