Remarque, essayez de modifier votre code pour vous débarrasser des codes d'échappement html.
Eh bien, même si cela fait un moment que je n'ai pas utilisé C/C , realloc qui grandit ne réutilise la valeur du pointeur de mémoire que s'il y a de la place en mémoire après votre bloc d'origine.
Par exemple, considérez ceci :
(xxxxxxxxxx..........)
Si votre pointeur pointe vers le premier x, et . signifie un emplacement mémoire libre et que vous augmentez la taille de la mémoire pointée par votre variable de 5 octets, cela réussira. Il s'agit bien sûr d'un exemple simplifié car les blocs sont arrondis à une certaine taille pour l'alignement, mais de toute façon.
Cependant, si vous essayez par la suite de l'augmenter de 10 octets supplémentaires et qu'il n'y en a que 5 disponibles, il devra déplacer le bloc en mémoire et mettre à jour votre pointeur.
Cependant, dans votre exemple, vous transmettez à la fonction un pointeur vers le caractère, pas un pointeur vers votre variable, et donc bien que la fonction strrep puisse en interne ajuster la variable utilisée, il s'agit d'une variable locale vers le strrep et votre code d'appel conservera la valeur de la variable de pointeur d'origine.
Cette valeur de pointeur, cependant, a été libérée.
Dans votre cas, l'entrée est le coupable.
Cependant, je ferais une autre suggestion. Dans votre cas, il semble que la variable input soit effectivement une entrée, et si c'est le cas, elle ne devrait pas être modifiée du tout.
J'essaierais donc de trouver une autre façon de faire ce que vous voulez faire, sans changer l'entrée, car des effets secondaires comme celui-ci peuvent être difficiles à détecter.