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

 


Dernière réponse
Sujet : problème de malloc
Carbon_14

legreg a écrit a écrit :

 
 
c'est total bullshit.
c'est bien de donner des faux bons conseils
mais faut assumer apres.
 




 
Je voulais principalement signaler qu'on pouvait NE PAS AVOIR D'AVERTISSEMENT DU COMPILO quand on utilise des opérateurs "mélangés" par étourderie (<- à éviter pour les futurs pros). C'était uniquement appliqué à des chaînes.
 
Donc, quand on passe du C au C++, vaut mieux tout réécrire. :ouch:


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Carbon_14

legreg a écrit a écrit :

 
 
c'est total bullshit.
c'est bien de donner des faux bons conseils
mais faut assumer apres.
 




 
Je voulais principalement signaler qu'on pouvait NE PAS AVOIR D'AVERTISSEMENT DU COMPILO quand on utilise des opérateurs "mélangés" par étourderie (<- à éviter pour les futurs pros). C'était uniquement appliqué à des chaînes.
 
Donc, quand on passe du C au C++, vaut mieux tout réécrire. :ouch:

Krueger Il n'y a ni constructeur, ni destructeur de primitifs. Et quand on alloue un tableau avec new chacune de ses valeurs n'est-elle pas indéfinie?
LeGreg

CARBON_14 a écrit a écrit :

Sous Borland C 3, quand j'ai transformé mes malloc() en new, les free() oubliés n'ont pas posé de pb.
Les compilos font le boulot de nous comprendre :)  :).  




 
c'est total bullshit.
c'est bien de donner des faux bons conseils
mais faut assumer apres.
 
Bon alors pour ceux qui n'auraient pas compris:
malloc et free c'est pour allouer des blocs memoires sans type et c'est a reserver pour la programmation C (tu peux utiliser
malloc en C++ mais tu cours le risque de t'emmeler les pinceaux).
New et Delete (ou sa variante delete[] pour les tableaux d'objets) c'est pour allouer des objets et ca ne fait pas que reserver la memoire ca appelle le constructeur et le destructeur de l'objet. Donc on ne melange pas les deux.
 
A+
LEGREG

flo850 sous linux/unix , pas de pb , la ram est liberer correctement ( meme si on oublie de faire les free )  
sous win , ca plante hyper vite si tu ne libere pas la ram .
moi , je conseille de bien verifier qu'il y a des free avec chaque malloc .<--- syntaxe du C ansi
spice di conass n

Citation :

mmm c pas forcement une question d'OS....


 
oui mais ca peut ;)

Suri

spice di conass a écrit a écrit :

les becanes tournent sous le meme OS chez toi et a l'ecole?  




 
mmm c pas forcement une question d'OS....

spice di conass les becanes tournent sous le meme OS chez toi et a l'ecole?
Suri

aragorns a écrit a écrit :

Si ca marche po sur les becannes de ton ecole, c parceke il faut que tu compiles ton source sur la becanne de l'ecole.
C peut etre ca, si tu l'a pas fait c meme sur.
Sinon, joue avec les options de compilations...  




avec un peu de bol, il est intelligent et le sait... :sarcastic:

aragorns Si ca marche po sur les becannes de ton ecole, c parceke il faut que tu compiles ton source sur la becanne de l'ecole.
C peut etre ca, si tu l'a pas fait c meme sur.
Sinon, joue avec les options de compilations...
Carbon_14 Sous Borland C 3, quand j'ai transformé mes malloc() en new, les free() oubliés n'ont pas posé de pb.
 
Habituellement (me semble-t-il), pour l'allocation mémoire, on fait (d'après les livres)
malloc() et free()
 
ou new xx et delete.
 
Les compilos font le boulot de nous comprendre :)  :).
BENB

El_Gringo a écrit a écrit :

 
 
hé !? un delete c sur un objet, pas sur un espace mémoire réservé par un malloc. normalement on fait un free...
ça passe ça !?  




A priori non...
Bien sur sur certaines implementations il n'y a pas de Pb.

El_gringo

la viper a écrit a écrit :

soit tu passes par le malloc / memcpy / free soit par le malloc / realloc / free
 
en gros :
 
 
 
while..
 
delete (ptr2);
char *ptr =(char*) malloc (size);
char *ptr2 = (char*) malloc (new_size);
mempcy(ptr2,ptr);
delete (ptr);
 
ou
char *ptr =(char*) malloc (size);
....
ptr = (char*) realloc (new_size);
 
delete(ptr);
ps : si free plante -> probleme de size  




 
hé !? un delete c sur un objet, pas sur un espace mémoire réservé par un malloc. normalement on fait un free...
ça passe ça !?

la viper soit tu passes par le malloc / memcpy / free soit par le malloc / realloc / free
 
en gros :
 
 
 
while..
 
delete (ptr2);
char *ptr =(char*) malloc (size);
char *ptr2 = (char*) malloc (new_size);
mempcy(ptr2,ptr);
delete (ptr);
 
ou
char *ptr =(char*) malloc (size);
....
ptr = (char*) realloc (new_size);
 
delete(ptr);
ps : si free plante -> probleme de size
Krueger Tu fais plein de malloc, mais est que t'en libères aussi par hasard (juste au cas où, sans être méchant)? Pourquoi ne pas faire un gros malloc de tout ce dont tu as besoin puis gérer tout ça dans une grosse structure (ce qui éviterait de perdre quelques dizaines d'octets à chaque allocation)?
 
Sinon c'est vrai que plus d'information serait la bienvenue.
 
:hello:
otb82

ninitro a écrit a écrit :

Voilà,
 
Encore un problème avec le C. J'ai un programme qui utilise la fonction malloc. Il tourne très bien sur mon portable, mais pas sur les pc de mon école. Problème : il faut que je le rende demain.
La fonction qui utilise le malloc est récursive, donc bouffe pas mal de mémoire. J'ai essayé de modifier la taille des arguments de malloc, mais rien n'y fait.
Y aurait-il une solution ?  



tu devrait expliquer un peu plus je crois

ninitro Voilà,
 
Encore un problème avec le C. J'ai un programme qui utilise la fonction malloc. Il tourne très bien sur mon portable, mais pas sur les pc de mon école. Problème : il faut que je le rende demain.
La fonction qui utilise le malloc est récursive, donc bouffe pas mal de mémoire. J'ai essayé de modifier la taille des arguments de malloc, mais rien n'y fait.
Y aurait-il une solution ?

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