-
deallocate un pointer ?
bonjour à tous,
je me retrouve à devoir travailler sur un code, qui est une poubelle à mon avis, même si la personne qui l'a écrit a fait un bel effort. le code a dû être écrit en 77 initialement, mais il a été mis à jour pour du 90, principalement pour l'allocation de mémoire (mais il y a encore de nombreux pointeurs et je soupçonne des confondaisons entre les deux).
sous compaq v6.6 windows, ça compile et ça exécute. sous linux j'ai une segfault. j'ai lancé gdb et remonté les erreurs. j'arive sur une ligne qui tente de deallocate un pointer.
d'où ma question : est-ce légal ?
si oui, je chercherai une autre source d'erreur, sinon, j'aurai ptête besoin de vous :)
adrien
-
Oui c'est légal. Mais ça ne veut pas dire que c'est légal dans ton contexte. On peut désassocier un pointeur et on peut déallouer un pointeur. Dans le premier cas, c'est la liaison entre le pointeur et la mémoire pointée qui est coupé. Dans le deuxième cas, c'est la mémoire pointée qui est libérée. En général, tu peux déallouer un pointeur s'il a été alloué et tu peux désassocier un pointeur qui a été associé.
Un Segmentation fault, c'est un problème d'adressage de mémoire. Si c'est produit par un deallocate() de pointeur, c'est possiblement que le pointeur n'a pas été alloué, ou que tu deallocate 2 fois, ou que le pointeur est associé à un bloc de mémoire alloué statiquement, ou que la mémoire est corrompue...