Bonjour,

Disons que j'ai un type struct ST qui contient entre autres un champ chaîne 'texte'. Une fois qu'un spécimen 'st' de type ST a fini d'être utile, il doit libérer tous les champs qui pointent sur de la mémoire allouée. Mais que faire s'il est possible que texte soit une constante/litérale, donc en mémoire statique ? Une tentative de libération mène au mieux à un segfault (et c'est une erreur vu que la mémoire peut être partagée par plusieurs constantes de même valeur).

Comment st peut-il savoir cela ? ? Ou, comment concevoir ST différement pour éviter ce problème ? Ou, quel point clé est-ce que je manque ?

J'ai pensé à copier le texte systématiquement sur le tas à la construction de ST. Mais c'est du gâchis inutile de temps et d'espace, vu que le pointeur passé est obligatoirement sûr : il pointe soit en mémoire statique, soit sur une variable calculée qui ne peut donc être que sur le tas [1].
J'ai aussi pensé à fournir une petite fct outil pour copier une constante vers le tas avant de construire un ST. Mais (1) à nouveau c'est inutile vu que la chaîne statique est sûre et (2) cela introduit un différence artificielle qui n'a aucun sens du point de vu de ST.
Enfin, ST pourrait avoir un bouléen qui indique si texte est statique. Mais à nouveau il n'y a aucune raison logique de s'occuper de cela dans l'interface de ST. De plus, je trouve cela profondément insatisfaisant côté implantation. Je n'arrive à "abstraire" ce problème d'une façon "juste". Pourquoi cette question n'est-elle apparemment pas connue ? (J'ai fait quelques recherches assez aprofondies, y compris sur stack-overflow, mais je ne sais pas trop quels mots-clé utiliser.) Est-ce que je passe à côté d'un point évident ?

Merci,
Denis

[1] Dans le cas d'une variable, cela pourrait être une contrainte spécifiée dans la doc de ST. Un exemple peut être le cas d'un nom d'usager qui pourrait être, en fonction de l'application ou du cas d'usage:
* une constant par défaut
* une simple variable fournie par l'usager
* une variable complexe calculée par ex par concaténation
Mais en fait mon cas actuel est toujours le type Texte "sûr" dont j'ai déjà parlé, avec 2 champs dont l'un contient la taille et l'autre un pointeur vers la séquence de bytes. Que faire si les bytes sont en fait statiques ?