Bonjour à tous,

J'utilise dans mon projet pas mal de malloc pour allouer dynamiquement la mémoire à des char*. D'après ce que j'ai lu et ce qu'on m'a dit, pour éviter les fuites de mémoire, il faut faire un free pour chaque malloc dans le programme.

Hors j'ai un problème pour librérer la mémoire sur les mallocs que j'ai fait sur les valeurs de retour de mes fonctions.

Par exemple j'ai une fonction "SAStrToChar" qui va transformer une string SA (string particulière que j'utilise via une api) en char* :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
char* SAStrToChar(SAString theSAStr)
{
	string theString = (string)theSAStr;
	Int32 length = theString.length()+1;
	char* returnValue = (char *) malloc(length);
	sprintf_s(returnValue, length, "%s", theString.c_str());
 
	return returnValue;
}
Seulement voilà, j'ai essayé de créer une variable "tempReturn" sur laquelle je vais faire le malloc, puis je vais transférer son contenu dans returnValue, libérer tempReturn, et retourner returnValue : returnValue est vide, enfin rempli de caractères spéciaux comme si j'avais libérer returnValue.

Exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
char* SAStrToChar(SAString theSAStr)
{
	char* returnValue = "";
	string theString = (string)theSAStr;
	Int32 length = theString.length()+1;
	char* tempReturn = (char *) malloc(length);
	sprintf_s(tempReturn, length, "%s", theString.c_str());
 
	returnValue = tempReturn;
	free(tempReturn);
 
	return returnValue;
}
Quand je libère la mémoire de tempReturn, sa libère aussi returnValue!
Savez-vous comment faire dans ce cas pour libérer la mémoire?

Merci d'avance!