Une erreur sur le free.. Oui mais pourquoi ?
Bonjour,
voià je desire supprimer d'une chaine de caractere les n premiers caracteres (par exemple les n premiers espaces)
Exemple:
"_______bonjour_" devient "bonjour_"
(_: pour la représentation d'un espace)
donc je ne vais pas y aller par 4 chemins voic mon programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include "stdafx.h"
#include <conio.h>
void supprFisrt(char* buf, int buflen, char c)
{
char * tmp = (char*)malloc(sizeof(char)*buflen);
int current = 0;
memcpy(tmp, buf, buflen);
while ((*tmp) && (current < buflen) && (*tmp == c) )
{
tmp++;
current++;
}
memset(buf, '\0', 1);
memcpy(buf, tmp, buflen);
buf[buflen-current] = 0;
printf("adr buf = %p\n", &buf);
printf("adr tmp = %p\n", &tmp);
//free(tmp); //ERREUR ICI !!??
return;
}
int main()
{
char *data = (char*)malloc(1000);
memcpy(data, " information\0", 14);
printf("data = [%s]\n", data);
printf("adr data= %p\n", &data);
supprFisrt(data, 14, ' ');
printf("data = [%s]\n", data);
free(data);
getch();
return 0;
} |
Voila. Je ne vois pas du tout pourquoi le free plante !!
J'ai aussi une autre question.
Admettons cette fonction toute simple:
Code:
1 2 3 4 5 6 7
|
char* affich()
{
char *out= (char*)malloc(10);
mempcy(out, "tomate\0",7);
return out;
} |
Jusque la ok pas de problème... et maintenant si dans le main je fais:
Code:
1 2
|
printf("%s\n", affich()); //j'appelle ma fonction qui retourne un char* |
Quand est ce que out est désalloué ???
Merci pour m'avoir lu et merci encore de me répondre...