Lorsque vous appelez function(str)
, vous passez la valeur de str
à function
. Cette valeur est une valeur de mémoire non initialisée car vous ne l'avez pas définie sur main
, mais ce n'est pas le problème.
Le problème est que function
a son propre pointeur, var
, dans lequel il place cette valeur de la fouillis afin que l'on puisse dire var points to the same thing (garbage) that str points to
. Cependant, ils ne sont pas la même variable. Ils sont deux variables distinctes, et la modification var
n'a aucun effet sur str
.
Lorsque vous indiquez var = (char*) malloc (100);
, vous allouez de la mémoire quelque part, puis vous indiquez à var
de le désigner. Maintenant, var
indique un emplacement différent de str
. Immédiatement, vous revenez de cette fonction, perdant var
et l'emplacement de cette mémoire. C'est d'ailleurs une fuite de mémoire. Quand vous revenez à main
, str
est comme toujours - pointant vers la poubelle.
Un exemple numérique:
char *str; // str -> 0xfeedface (garbage)
function(str);
// inside 'function', an initialization like this occurs
char *var = str; // var -> 0xfeedface (same garbage)
var = (char*) malloc (100); // var -> 0x12341234 (alloc'd memory)
return;
// back in 'main'
strcpy(str, "some random string"); // str still points to 0xfeedface!
Pour le faire correctement, vous devez changer la valeur de str
. Cela signifie que function
nécessite un pointeur vers str
ou un pointeur vers un pointeur.
void function(char **var)
{
*var = (char*)malloc(sizeof(char) * 100);
}
int main()
{
char *str;
function(&str);
strncpy(str, "some random string", 99);
...
free(str); // important in general
}
Lorsque vous dites "ne fonctionne pas", il serait utile de savoir * quoi * à ce sujet ne fonctionne pas. Les détails sont bons. –
Désolé. J'ai oublié de le mentionner. Il compile, mais quand je l'exécute, je reçois une erreur de segmentation. – nunos
Votre code fonctionne exactement comme il le devrait. Si vous pensez que quelque chose "ne fonctionne pas", vous devez expliquer ce que c'est. Sans cela, votre question n'a aucun sens. – AnT