Question
J'écris une simple liste liée gestionnaire de mémoire en fonction de la forme:
... En-tête | Bloc | tête |. Bloquer ... avec une liste utilisée et libre
Si la fonction realloc () a été demandé de réduire la taille d'un bloc, est-il correct de remplacer certains des octets de fin avec l'en-tête pour le bloc nouvellement créé? La documentation que j'ai lu l'indique, ce « comportement non défini », mais ne applications dépendent des données étant toujours là?
La solution
Très probablement, la remarque sur le comportement non défini est allé comme ceci: « il est non défini pour accéder à tous les octets après la fin du bloc lors du retour de realloc »
.Une telle spécification est là précisément pour vous permettre de mettre un en-tête dans les octets de fin dans la mise en œuvre de realloc . Que ce soit un comportement non défini signifie que si une application tenterait de lire des octets (qui sont conceptuellement disparu), il lirait votre tête, qui apparaîtrait comme des ordures à l'application; si elle écrit même, il tuerait votre tête -. si l'application ne doit pas faire
Autres conseils
Bien sûr. Il a été réaffecté, alors maintenant il a été libéré par l'application et il appartient à votre gestionnaire. Il est normal de commencer avec de nouveaux démolir pointeurs.