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à?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top