[C++] Malloc et Free ... truc que je pige pas

Malloc et Free ... truc que je pige pas [C++] - C++ - Programmation

Marsh Posté le 16-05-2003 à 12:55:05    

Mon Free me plante le prog avec une histoire de bad heap pointer :
 

Code :
  1. bool CEtatList::Process()
  2. {
  3. CEtatListElt* cur;
  4. char* tab=NULL,*pt=NULL;
  5. int N,i;
  6. cur=first;
  7. while (cur!=NULL)
  8. {
  9.   if (cur->etat.ToBeProcessed)
  10.   {
  11.    N=cur->etat.GetNewStatesList(&tab);
  12.    for(i=0; i <N; i++)
  13.    {
  14.     pt=&tab[i*10];
  15.     AfxMessageBox(pt);
  16.    }
  17.    cur->etat.ToBeProcessed=false
  18.  
  19.    free(tab);
  20.   }
  21.  
  22.   cur=cur->next;
  23. }
  24. return true;
  25. }


 
où la fonction GetNewStateLists est la suivante :  
 

Code :
  1. int CEtat::GetNewStatesList(char **tab)
  2. {
  3. int N=2;
  4. *tab=(char*)malloc(10*sizeof(char));
  5. *tab="123456789\0987654321\0";
  6. return N;
  7. }


 
Merci d'avance,
 
Kyle

Reply

Marsh Posté le 16-05-2003 à 12:55:05   

Reply

Marsh Posté le 16-05-2003 à 12:59:15    

c'est normal
 
 

Code :
  1. *tab=(char*)malloc(10*sizeof(char)); //tu alloues de la memoire, ca c OK
  2. *tab="123456789\0987654321\0"; //tu fais pointe le contenu de tab sur un string (contrairement a ce que tu crois, tu ne le recopie pas) etant donne que cette zone ne t'appartient pas, le free va planter dessus


 
copie de string = strcpy

Reply

Marsh Posté le 16-05-2003 à 13:00:44    

bien vu !

Reply

Marsh Posté le 16-05-2003 à 13:02:33    

c'est pas pour faire mon taz, mais si tu as un peu de temps (genre 5min) regarde du cote des std::string, au moins t'auras plus a te soucier de ce fatras

Reply

Marsh Posté le 16-05-2003 à 13:46:29    

C++ et malloc dans une même phrase, pour moi, ca colle pas ...


---------------
last.fm
Reply

Marsh Posté le 16-05-2003 à 14:38:48    

chrisbk a écrit :

c'est pas pour faire mon taz, mais si tu as un peu de temps (genre 5min) regarde du cote des std::string, au moins t'auras plus a te soucier de ce fatras


 
malloc -> C
string -> C++
 
 :o

Reply

Marsh Posté le 16-05-2003 à 14:40:42    

ToxicAvenger a écrit :


 
malloc -> C
string -> C++
 
 :o  


heuh oui, mais le rapport avec mon post ?
ah si, cpris, mais je me permet de te montrer ca :
 
 

Code :
  1. bool CEtatList::process()


 
ou alors le C a vachement evoluer depuis la derniere fois que j'en ai fait [:meganne]


Message édité par chrisbk le 16-05-2003 à 14:41:25
Reply

Marsh Posté le 16-05-2003 à 15:38:52    

C'est effectivement du C++

Reply

Marsh Posté le 16-05-2003 à 16:39:53    

Kyle_Katarn a écrit :

C'est effectivement du C++


 
malloc/free c'est du C  :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 16-05-2003 à 18:38:25    

mais ça marche en C++ ;-)

Reply

Marsh Posté le 16-05-2003 à 18:38:25   

Reply

Marsh Posté le 16-05-2003 à 20:12:00    

Kyle_Katarn a écrit :

mais ça marche en C++ ;-)


 
Tout dépend si tu veux coder proprement en utilisant new/delete (qui est plus simple) ou coder comme un porc en faisant du mix C/C++ [:spamafote]


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 16-05-2003 à 20:31:24    

je vais convertir alors ...
 
mais j'aimerais que tu m'explique en quoi, pour de simple variables (et non des structures complexes comme des classes), new/delete est mieux que malloc/free (avec un autre argument que "c'est du C" )


Message édité par Kyle_Katarn le 16-05-2003 à 20:32:47
Reply

Marsh Posté le 16-05-2003 à 22:12:05    

Kyle_Katarn a écrit :

je vais convertir alors ...
 
mais j'aimerais que tu m'explique en quoi, pour de simple variables (et non des structures complexes comme des classes), new/delete est mieux que malloc/free (avec un autre argument que "c'est du C" )


Le premier intéret que j'y vois, c'est que qd tu donnes des bouts de code personne te fait chier avec ca...:D
Mais bon ca donne un code plus propre, plus lisible (AMHA), et ca peut éventuellement éviter des erreurs du style oubli de sizeo(machin)...

Reply

Marsh Posté le 16-05-2003 à 22:44:51    

ToxicAvenger a écrit :


 
malloc -> C
string -> C++
 
 :o  


 
je peux jouer moi aussi ?
 
fork   -> C
vector -> C++
 
j'ai bon ?

Reply

Marsh Posté le 17-05-2003 à 12:54:14    

Kyle_Katarn a écrit :

je vais convertir alors ...
 
mais j'aimerais que tu m'explique en quoi, pour de simple variables (et non des structures complexes comme des classes), new/delete est mieux que malloc/free (avec un autre argument que "c'est du C" )


 
Quand tu parles anglais, tu ne fous pas des mots d'espagnol au milieu, même si ton interlocuteur comprend les 2. C'est de la simple logique, si tu ne la comprends pas, délaisse la programmation pour te lancer dans la poésie ou la sculpture... :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 17-05-2003 à 13:25:43    

Reply

Marsh Posté le 17-05-2003 à 13:38:08    

le problème de malloc/free en C++, c'est que ça ne fait pas appel au constructeur/destructeur, d'ou le problème...
 
et puis tourne toi vers les strings, ça te prendra moins de temps à developper et ça t'evitera de faire des bourdes enormes puisqu'apparemment, avant meme de parler de C++, tu as des lacunes en C [:the grosminet]  :)

Reply

Marsh Posté le 17-05-2003 à 13:56:48    

[mode mauvaise langue]
 
faut dire que les programmeurs venant de VB font souvent des bêtises avec les pointeurs :D
 
[/mode mauvaise langue]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2003 à 14:06:50    

antp a écrit :

[mode mauvaise langue]
 
faut dire que les programmeurs venant de VB font souvent des bêtises avec les pointeurs :D
 
[/mode mauvaise langue]


 
mais peut on considerer les gens qui font du vb comme des programmeurs ?  [:figti]  
 
A+

Reply

Marsh Posté le 17-05-2003 à 14:18:00    

et un petit tour vers les std::list serait le bienvenu: depuis le temps, tu penses bien que le problème des listes est résolu :sweat:
 
 
et pi j'ai comme l'impression que t'es faché avec les références...l'achat d'un livre s'impose Kyle   [:tobrainc]

Reply

Marsh Posté le 17-05-2003 à 15:58:49    

Babouchka a écrit :


 
mais peut on considerer les gens qui font du vb comme des programmeurs ?  [:figti]  
 


 
certes  :D


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 17-05-2003 à 22:04:04    

++Taz a écrit :


et pi j'ai comme l'impression que t'es faché avec les références...l'achat d'un livre s'impose Kyle   [:tobrainc]  


 
Disons que je "pense en pointeurs"...
 
Pour l'achat d'un livre, je préfère parler avec des gens qui savent sur un forum plutôt que d'avoir le réflexe désocialisant de me plonger dans un bouquin au premier problème venu.  
 
Quand aux vannes sur VB, si vous me trouvez un meilleur langage d'IHM vous me faites signe...
(ok sortit du prototypage IHM je reconnais que ça sert pas à grand chose)


Message édité par Kyle_Katarn le 17-05-2003 à 22:22:47
Reply

Marsh Posté le 17-05-2003 à 22:08:51    

Konar a écrit :


 
je peux jouer moi aussi ?
 
fork   -> C
vector -> C++
 
j'ai bon ?


 
fork ? connais pas, c'est pas standard. C'est posix.

Reply

Marsh Posté le 17-05-2003 à 22:10:00    

++Taz a écrit :

le problème de malloc/free en C++, c'est que ça ne fait pas appel au constructeur/destructeur, d'ou le problème...
 
et puis tourne toi vers les strings, ça te prendra moins de temps à developper et ça t'evitera de faire des bourdes enormes puisqu'apparemment, avant meme de parler de C++, tu as des lacunes en C [:the grosminet]  :)  


 
c'est surtout qu'il croit que le C++ n'est qu'une extension du C. Alors que ces 2 langages n'ont strictement rien à voir, mais bon. Dans ces cas là, C# et java c'est la même chose.

Reply

Marsh Posté le 17-05-2003 à 22:10:53    

Kyle_Katarn a écrit :


 
Disons que je "pense en pointeurs"...
 
Pour l'achat d'un livre, je préfère parler avec des gens qui savent sur un forum plutôt que d'avoir le réflexe désocialisant de me plonger dans un bouquin au premier problème venu.  
 
Quand aux vannes sur VB, si vous me trouvez un meilleurs language d'IHM vous me faites signe...
(ok sortit du prototypage IHM je reconnais que ça sert pas à grand chose)


 
trop facile: C#
 
Et VB n'est pas un "langage d'ihm" (ca ne veut rien dire d'ailleurs. De plus en français, c'est langage sans u. Tu mélanges C et C++, anglais et francais... t'es pas bordélique comme garçon  :lol: )
VB c'est du RAD, point barre.
 
A la rigueur en "langage d'ihm" je verrais bien UIL/MRM mais bon...


Message édité par ToxicAvenger le 17-05-2003 à 22:12:45
Reply

Marsh Posté le 17-05-2003 à 22:12:40    

Kyle_Katarn a écrit :


Quand aux vannes sur VB, si vous me trouvez un meilleurs language d'IHM vous me faites signe...
 


 
Delphi/C++Builder [:kiki]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2003 à 22:15:22    

Oui mais t'es bien placé pour savori que je débute en Delphi ;-)
 
Bon, je pense qu'on va clore ce topic qui va partir en troll non constructifs, merci de votre aide pour ceux qui ont bien voulu m'aider.

Reply

Marsh Posté le 17-05-2003 à 22:18:20    

Kyle_Katarn a écrit :

Oui mais t'es bien placé pour savori que je débute en Delphi ;-)
 
Bon, je pense qu'on va clore ce topic qui va partir en troll non constructifs, merci de votre aide pour ceux qui ont bien voulu m'aider.


 
on t'as repondu pourtant. Si tu prends la mouche dès qu'on te fait remarquer tes faiblesses, en effet, fermons le topic. Ca ne sert a rien de te répondre donc.

Reply

Marsh Posté le 17-05-2003 à 22:21:57    

c'est pas ce que je voulais dire et c'est ce genre de truc que je voulais éviter.
 
Je suis conscient de mes faiblesses, c'est pour cela que je remercie toujours ceux qui veulent bien m'aider.

Reply

Marsh Posté le 17-05-2003 à 22:23:03    

non Kyle a raison, dès qu'on commence à comparer des langages ça part en troll ou en discussion sans fin :/


Message édité par antp le 17-05-2003 à 22:23:13

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2003 à 23:03:06    

antp a écrit :

non Kyle a raison, dès qu'on commence à comparer des langages ça part en troll ou en discussion sans fin :/


 
je vois pas où ca partait en live là :??:

Reply

Marsh Posté le 17-05-2003 à 23:34:16    

Kyle_Katarn a écrit :


Pour l'achat d'un livre, je préfère parler avec des gens qui savent sur un forum plutôt que d'avoir le réflexe désocialisant de me plonger dans un bouquin au premier problème venu.

ben apparemment, ça porte pas ses fruits   [:tomtom75]

Reply

Marsh Posté le 17-05-2003 à 23:38:54    

ToxicAvenger a écrit :


 
je vois pas où ca partait en live là :??:  


 
Ça risquait :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-05-2003 à 00:09:38    

antp a écrit :


 
Ça risquait :D


 
ah oui mais dans ces cas là on fait jamais rien alors  :o

Reply

Marsh Posté le 18-05-2003 à 13:14:35    

Question en passant (plus pour antp je pense):
 
ça sert à "rien" d'utiliser les std::string avec Borland C++ Builder, comme il y a AnsiString qui m'a l'air de faire exactement les même choses?
 
Merci!


---------------
Another .Net Blog
Reply

Marsh Posté le 18-05-2003 à 13:16:27    

Ca dépend, on peut vouloir faire du code un minimum portable.

Reply

Marsh Posté le 18-05-2003 à 13:23:54    

code portable et/ou sans les VCL de Borland -> std::string
code uniquement pour C++Builder et utilisant massivement les VCL de Borland -> AnsiString
Pour les échanges avec l'interface graphique si on utilise les VCL, AnsiString est quand même plus pratique :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 19-05-2003 à 00:02:35    

Pas besoin d'être portable, et utilisant les VCL => AnsiString :D


---------------
Another .Net Blog
Reply

Marsh Posté le 19-05-2003 à 00:59:54    

antp a écrit :


 
Delphi/C++Builder [:kiki]  


 
 
+1 :D

Reply

Marsh Posté le 19-05-2003 à 21:09:02    

    *tab=(char*)malloc(10*sizeof(char));
     *tab="123456789\0987654321\0";
 
attention si tu utilises un strcpy, ca va prendre plus de 10 caractères.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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