Probleme de mémoire, impossible à vider... [Résolu]

Signaler
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,



Voilà mon problème
:



J'ai le code suivant :




char *buffer;




sprintf(buffer,"DELETE
FROM patient WHERE num_typepaid 7 AND impai 0 AND heure_entrer
<=
%0.2d%0.2d00 AND

heure_entrer > %0.2d%0.2d00",heure, minute,
heure_moin, minute_moin);




mysql_query(conn,buffer);




Le problème étant
que le code fonctionne bien mais que quelque fois, c'est à
dire que si je fait une boucle sur se code au bout d'un moment la
mémoire sature... j'ai ce message d'erreur :
"L'instruction à
"0x00406b87" emploie l'adresse mémoire "0x317590c8".
La mémoire ne peut pas être "written"..."



Et si je met free(buffer);
alors la requête ne s'effectue pas une seule foie et j'ai ce
message d'erreur :



"DAMAGE: after Normal
block (#63) at 0x004300E0"



J'ai cherché pendant
toute une aprèm et rien...




Merci d'avance pour la
réponce

17 réponses

Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

J'ai trouver se qui clochais...

il falais que je mette un nombre bcp plus grand... j'ai donc mis 1000*sizeof(char) et à la fin j'ai mis un free(buffer);

Merci de votre à tous...
Messages postés
14985
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
8 mars 2021
94
Ton tableau n'est pas alloué...



char * buffer;

buffer = (char *)malloc(TAILLE_MAX*sizeof(char));

....

free(buffer);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

Excuse moi, j'ai oublié de l'ecrire dans mon message, mais j'ai bien aloué mon tableau...

buffer = malloc(sizeof (char*)*10);

et j'ai toujours la meme erreur....
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
40 octets pour y mettre toute ta requête, c'est une plaisanterie, non ???

ciao...
BruNews, MVP VC++
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

Et bien, la requête fonctionne... après c'est vrai que sa parai bizard... de toute manière que je mette
buffer = malloc(sizeof (char*)*10);
ou
buffer = malloc(sizeof (char*)*50);
ou
buffer = malloc(sizeof (char*)*100);
J'ai toujours le même message d'erreur... :-(
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
sizeof(char))
SANS le '*' de pointeur !!!

ciao...
BruNews, MVP VC++
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

Excuse moi, je n'est pas compris, où mettre le '*'?
Messages postés
14985
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
8 mars 2021
94
buffer = (char *)malloc(TAILLE*sizeof(char));



Tu veux que ton tableau fasse TAILLE fois la taille d'un CHAR

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
C'est marquer de ne pas en mettre,
char* désigne une adresse et char un caractère
C'est pas trop pareil


void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Désolé pas une adresse mais quelque chose qui pointe vers une adresse :)


void Aurevoir( void ); //Bonne journée
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

ok, dsl d'avoir mal compris... ceci étant même en metant



buffer = (char *)malloc(100*sizeof(char));



le probleme perciste... :(:(
Messages postés
14985
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
8 mars 2021
94
Es-tu bien sûr de n'écrire dans Buffer qu'un nombre de caractères inférieur à 100?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Purée t'en alloue beaucoup quand même lol


void Aurevoir( void ); //Bonne journée
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
/auteurdetail.aspx?ID=39449 ben t'aurais mis
char buffer[100]
sprintf(bla bla..);
appel requete

et y avait pas besoin d'alloc ni desalloc, pour 100 octets ça va impec sur la pile le temps de l'appel et tu gagnes les appels au memory manager qui sont très couteux.

ciao...
BruNews, MVP VC++
Messages postés
28
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
2 novembre 2006

Merci pour l'info, je vais me penser deçu ...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Pourquoi ta 2 chats pareils ???


void Aurevoir( void ); //Bonne journée
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
encore le souk de cette zone rich( !!!)texte à la noix.

ciao...
BruNews, MVP VC++