Dint trouver le lien exact de ma réponse, et poser cette question simple en termes où la fonction retourne le char *comment se fait des données est toujours présent dans le pointeur, même après avoir libéré avant de retourner la valeur
j'ai écrit le code de cette façon, afin que la fonction de concatense elle-même doit allouer & libérer la mémoire.
Quelqu'un peut-il plz aider avec les questions suivantes:
1) est la libération de la mémoire placée correctement? (J'ai couru Valgrind & trouvé aucun problème aussi)
2) Comment se fait-il que le pointeur "ptr" auquel est attribué la valeur de maintien, selon ma compréhension, si une mémoire à un ptr est libérée, alors la valeur devrait aussi être perdue ? Veuillez me corriger si je me trompe.
char * concat(char *str1, char *str2)
{
char *ptr;
ptr=(char*)malloc(strlen(str1)+strlen(str2)+1); //allocated+1 for NULL character as well
int i=0,j=0;
while(str1[i]!='\0')
{
ptr[j]=str1[i];
printf("letter from src is %c\n",str1[i]);
i++; j++;
}
i=0;
while(str2[i]!='\0')
{
ptr[j]=str2[i];
j++;i++;
}
ptr[j]='\0';
cout<<ptr;
free(ptr);
return ptr;
}
int main()
{
char *str1="hello";
char *str2="world";
cout<<str1<<endl;
cout<<str2<<endl;
char *res=concat(str1,str2);
return 0;
}
'cout' est C++. Pourquoi utilisez-vous 'malloc' et' free' en C++? –
La fonction 'free' n'est pas nécessaire pour écraser la mémoire libérée. –
'free' passer à' main'. – BLUEPIXY