Le problème, c'est l'objet parm
est local à cette fonction. Il n'est pas légal de prendre et de conserver (c'est-à-dire de renvoyer) un pointeur sur cette fonction après la fin de l'invocation de la fonction.
En d'autres termes, parm
"vit" tant que la fonction existe. Lorsque la fonction renvoie tous ses objets locaux (tels que parm
) "die".
En tant que crush
dans les commentaires, pointer1
devient un pointeur invalide, également appelé affectueusement pointeur "ballant".
Montrez donc la bonne façon de faire !!!
Comme demandé, il y a plusieurs façons de procéder "correctement" :
-
Retour parm + 1
et modifier le type de retour de la fonction. Il ne semble pas que vous ayez vraiment besoin d'un pointeur
-
Prend le paramètre comme pointeur (ou référence, c'est du C++) et incrémente sa valeur pointée. Vous pouvez également le renvoyer si vous le souhaitez - le renvoi est valide puisqu'il provient de l'extérieur de la fonction
-
Ajouter un élément statique static int sparm; sparm = parm + 1
et renvoie un pointeur vers sparm
. Cela rendra votre fonction non réentrante, mais cela fonctionnera : static
les objets ne meurent pas à la fin de l'invocation de la fonction
-
Allouer (ugh ! ne pas le faire !) de la mémoire pour un pointeur et le renvoyer
En lisant le code plus attentivement, il est clair que le pointeur n'est jamais valide. Dès le départ, il dépasse d'un slot la mémoire disponible en tant que parm
.