Le contexte : J'essaie de me faire une idée des pointeurs, nous les avons vus il y a quelques semaines à l'école et en m'exerçant aujourd'hui, j'ai rencontré un problème stupide, qui peut être très simple pour vous, mais j'ai peu ou pas d'expérience en programmation.
J'ai vu pas mal de questions sur SO à propos de la suppression des pointeurs mais elles semblent toutes concerner la suppression d'une classe et non d'un 'simple' pointeur (ou quel que soit le terme approprié), voici le code que j'essaie d'exécuter :
#include <iostream>;
using namespace std;
int main() {
int myVar,
*myPointer;
myVar = 8;
myPointer = &myVar;
cout << "delete-ing pointers " << endl;
cout << "Memory address: " << myPointer << endl;
// Seems I can't *just* delete it, as it triggers an error
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// Error: a.out(14399) malloc: *** error for object 0x7fff61e537f4:
// pointer being freed was not allocated
// *** set a breakpoint in malloc_error_break to debug
// Abort trap: 6
// Using the new keyword befor deleting it works, but
// does it really frees up the space?
myPointer = new int;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer continues to store a memory address.
// Using NULL before deleting it, seems to work.
myPointer = NULL;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer returns 0.
}
Mes questions sont donc les suivantes :
- Pourquoi le premier cas ne fonctionne pas ? Il semble que l'utilisation et la suppression d'un pointeur soit la plus simple ? L'erreur dit que la mémoire n'a pas été allouée mais que 'cout' a renvoyé une adresse.
- Dans le deuxième exemple, l'erreur n'est pas déclenchée, mais un cout de la valeur de myPointer est effectué. toujours renvoie une adresse mémoire ?
- Le numéro 3 fonctionne-t-il vraiment ? Il me semble que cela fonctionne, le pointeur ne stocke plus d'adresse, est-ce la bonne façon de supprimer un pointeur ?
Désolé pour cette longue question, je voulais que ce soit aussi clair que possible. Je répète également que j'ai peu d'expérience en programmation, donc si quelqu'un pouvait répondre à cette question en termes simples, ce serait très apprécié !