C++, les pointeurs ? Heu...
olof
Membre
J'ai un pote qui est en train d'apprendre le c++. Enfin, il essaye, il a pas mal de peine. Du coup, je me suis dit que je pourrais lui filer un coup de main. Le seul problème, c'est que je ne connais pas le c++ non plus ;D
En faisant quelques tests, j'ai compilé le même programme sur mon G5, en ligne de commande, avec g++ et sur Windows, avec le g++ installé avec les outils cygwin.
Sur Win, pas de problèmes, sur Mac, Bus error !!!
Voilà le code en question :
Sur Mac, c'est le *ptr = 27 qui pose problème.
Y'a une bonne âme pour éclairer ma lanterne ??
Merci !
En faisant quelques tests, j'ai compilé le même programme sur mon G5, en ligne de commande, avec g++ et sur Windows, avec le g++ installé avec les outils cygwin.
Sur Win, pas de problèmes, sur Mac, Bus error !!!
Voilà le code en question :
<br />#include <iostream><br />using namespace std;<br /><br />int main () {<br /><br /> int a = 10;<br /> int *ptr;<br /><br /> cout << "Adresse de ptr :" << ptr << endl;<br /><br /> *ptr = 27;<br /> cout << "ptr :" << *ptr << endl;<br /><br /> return 0;<br />}<br />
Sur Mac, c'est le *ptr = 27 qui pose problème.
Y'a une bonne âme pour éclairer ma lanterne ??
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Essaye de comprendre ton erreur en te demandant ce que *ptr=27 fait exactement ...
Indice : *ptr est un pointeur... mais il pointeur sur quoi au fait...
Alors, je raisonne comme ça : *ptr est un pointeur sur un entier (int). Non ? Ce qui signifie que ptr est un entier ?!?!
Bon, vu que ça ne passe pas, je suppose que je ne raisonne pas très juste
Tu dois faire un malloc ou un new... pour que ton pointeur pointe à une adresse valide.
Mais pourquoi sous Win ça fonctionne sans faire le new ?!?!?
*ptr=27 ecrit la valeur 27 à l'adresse mémoire pointée par ptr
Le problème est que ton pointeur n'a pas été intitalisé et donc possède une adresse alléatoire, car c'est une variable locale, il aurait été initialisé à NULL dans le cas d'une variable globale.
Moralité: il vaut mieux initialiser un pointeur avant de l'utiliser
int a = 10;
int *ptr=&a; // ptr pointe l'adresse de a
[Supposition]
Peut être parce que le pointeur pointe dans la zone mémoire de l'app ou celui de l'env. de dev. et que winwin laisse passer... (tant que tu n'es pas dans une zone interdite pour lui) sur mac il pointe vraiment n'importe où au lancement et OS X ne veut pas.
Si quelqu'un en sait plus...
[Supposition]