C++, les pointeurs ? Heu...

olofolof Membre
07:20 modifié dans Actualités #1
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 :

<br />#include &lt;iostream&gt;<br />using namespace std;<br /><br />int main () {<br /><br />	int a = 10;<br />	int *ptr;<br /><br />	cout &lt;&lt; &quot;Adresse de ptr :&quot; &lt;&lt; ptr &lt;&lt; endl;<br /><br />	*ptr = 27;<br />	cout &lt;&lt; &quot;ptr :&quot; &lt;&lt; *ptr &lt;&lt; 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 !

Réponses

  • mpergandmpergand Membre
    07:20 modifié #2
    Erreur typique de newbie :)

    Essaye de comprendre ton erreur en te demandant ce que *ptr=27 fait exactement ...
  • 07:20 modifié #3
    C'est clair...

    Indice : *ptr est un pointeur... mais il pointeur sur quoi au fait...
  • olofolof Membre
    07:20 modifié #4
    Ah, je pensais bien que ça sentait le newbie  :P

    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  :o
  • 07:20 modifié #5
    *ptr pointe surtout dans les choux... ;D

    Tu dois faire un malloc ou un new... pour que ton pointeur pointe à  une adresse valide.
  • olofolof Membre
    07:20 modifié #6
    Ok, donc :

    <br />int *ptr;<br />ptr = new int;<br />*ptr = 27;<br />
    


    Mais pourquoi sous Win ça fonctionne sans faire le new ?!?!?
  • mpergandmpergand Membre
    07:20 modifié #7
    dans 1131049291:

    *ptr pointe surtout dans les choux... ;D


    :) :)

    *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
  • 07:20 modifié #8
    dans 1131050236:

    Mais pourquoi sous Win ça fonctionne sans faire le new ?!?!?


    [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]
Connectez-vous ou Inscrivez-vous pour répondre.