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

  FORUM HardWare.fr
  Programmation
  C

  [C] pourquoi ça ne plante pas ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] pourquoi ça ne plante pas ?

n°595147
dweis
Posté le 21-12-2003 à 16:08:42  profilanswer
 

Code :
  1. result = (char *)malloc(1*sizeof(char));
  2. result[0] = 's';
  3. result[1] = 'e';
  4. result[2] = 't';
  5. result[3] = 0;


 
bon je débute encore avec les pointeurs et je pige pas un truc.
ce code marche parfaitement (sous mandrake). ça devrait pas plutôt faire un segfault (car j'ai pas fait un malloc(4*sizeof.. ) ?
si c'est bien le cas, y'a un moyen de faire en sorte que ça plante vraiment ? (sinon c'est dûr après pour moi de tester)

mood
Publicité
Posté le 21-12-2003 à 16:08:42  profilanswer
 

n°595150
Taz
bisounours-codeur
Posté le 21-12-2003 à 16:12:48  profilanswer
 

1) cast inutle
2) sizeo(char) == 1 par définition
3) par ce que la zone mémoire contigue t'appartient sans doute. cela dit ça peut tout et n'importe quoi ... des fois on tape sur un truc dans la pile qui sert au retour de la fonction et boom
4) utilise Electric Fence, pour plus de sécurités

n°595161
dweis
Posté le 21-12-2003 à 16:32:51  profilanswer
 

mais imagine j'ai un tableau de 2 caractères.

Code :
  1. result = (char *)malloc(2*sizeof(char));
  2. result[0] = 's';
  3. result[1] = 0;

 
jusque là pas de problème.
 
par contre si ensuite je veux augementer la taille de mon tableau, c'est là que je ne suis pas sûr de la syntaxe et c'est pour ça que l'absence d'erreur dans le code précédent me gène.
est-ce que ceci est ok ?

Code :
  1. result = (char *)malloc(2*sizeof(char));
  2. result[0] = 's';
  3. result[1] = 0;
  4. result = (char *)realloc(result, 4*sizeof(char));
  5. result[1] = 'g';
  6. result[2] = 'z';
  7. result[3] = 0;

n°595166
Taz
bisounours-codeur
Posté le 21-12-2003 à 16:43:09  profilanswer
 

Taz a écrit :

1) cast inutle
2) sizeof(char) == 1 par définition
3) par ce que la zone mémoire contigue t'appartient sans doute. cela dit ça peut tout et n'importe quoi ... des fois on tape sur un truc dans la pile qui sert au retour de la fonction et boom
4) utilise Electric Fence, pour plus de sécurités

[:quoted]

n°595172
dweis
Posté le 21-12-2003 à 16:46:29  profilanswer
 

je vois pas la réponse à ma question dans ton post... :-/

n°595175
Taz
bisounours-codeur
Posté le 21-12-2003 à 16:48:00  profilanswer
 

la réponse est « c'est normal »  
commence par prendre en compte mes 4 remarques

n°595191
bjone
Insert booze to continue
Posté le 21-12-2003 à 17:15:52  profilanswer
 

si ça plante pas (segfault, ou page fault), ça peut être dû à la granularité/alignement de l'allocation (allocation par paquets de x octets, de toutes façon les os allouent de la mémoire aux process par pages de 4ko ou 4mo dans le cas de cpus x86).


Message édité par bjone le 21-12-2003 à 17:16:06
n°595198
dweis
Posté le 21-12-2003 à 17:32:15  profilanswer
 

j'sais pas si j'ai du mal ou pas mais je ne pige tjrs pas.
est-ce que le code suivant est bien correct ou non ???

Code :
  1. result = (char *)malloc(2*sizeof(char)); 
  2.   result[0] = 's'; 
  3.   result[1] = 0; 
  4.   result = (char *)realloc(result, 4*sizeof(char));
  5.   result[1] = 'g'; 
  6.   result[2] = 'z'; 
  7.   result[3] = 0;

n°595200
Taz
bisounours-codeur
Posté le 21-12-2003 à 17:32:53  profilanswer
 

BJOne a écrit :

si ça plante pas (segfault, ou page fault), ça peut être dû à la granularité/alignement de l'allocation (allocation par paquets de x octets, de toutes façon les os allouent de la mémoire aux process par pages de 4ko ou 4mo dans le cas de cpus x86).

non, ça n'est pas la raison. ça ne plante pas parce que tu te balades dans une zone qui t'appartient également, même si éthiquement tu n'en as pas le droit

n°595201
Taz
bisounours-codeur
Posté le 21-12-2003 à 17:33:23  profilanswer
 

Taz a écrit :

1) cast inutle
2) sizeof(char) == 1 par définition
3) par ce que la zone mémoire contigue t'appartient sans doute. cela dit ça peut tout et n'importe quoi ... des fois on tape sur un truc dans la pile qui sert au retour de la fonction et boom
4) utilise Electric Fence, pour plus de sécurités

[:quoted]
sinon oui il est correct

mood
Publicité
Posté le 21-12-2003 à 17:33:23  profilanswer
 

n°595202
dweis
Posté le 21-12-2003 à 17:35:20  profilanswer
 

ok thx

n°595806
sanctuaire
Droit dans les yeux...
Posté le 22-12-2003 à 20:21:28  profilanswer
 

comme l'a dit Taz, la lib efence est ton amie ;)

n°595903
dweis
Posté le 23-12-2003 à 00:52:58  profilanswer
 

yep mais apparement efence a pas été installé avec ma mandrake. faut que je vois où dw ça..

n°595975
nico168
Posté le 23-12-2003 à 11:02:06  profilanswer
 

urpmi electricfence


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

  [C] pourquoi ça ne plante pas ?

 

Sujets relatifs
Quand je change de couleur ça planteProblème avec Visual C++ 6.0 : plante a l'edition des liens
Recherche d'une chaine dans un fichier, pourquoi ça plante sur .exe ?MFC appli qui plante
PHP : XML parser : plante sur les accents ![Résolu] Un GetWindowText qui plante...
un ptit truc tout con mais qui plante, pourquoi ?(pointeur)Intercepter l'erreur produite par explorer quand il plante
ptit probleme tout con +1 poukoi t'range plante ?[Easy Php] Aie aie aie : ca plante !
Plus de sujets relatifs à : [C] pourquoi ça ne plante pas ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)