Partage
  • Partager sur Facebook
  • Partager sur Twitter

le tutos allocation dinamique en C

    22 août 2006 à 15:43:44

    Bonjour, je vous ecris car lorsque sur le tutos de lallocation dynamique en C, je fait un copier coller dans dev c++, celui ci trouve une erreur de conversion vu que malloc renvoie un type void et que ageAmis et un long.

    long* ageAmis = NULL; // Ce pointeur va servir de tableau après l'appel du malloc
    un peu plus loin
    ageAmis = malloc(nombreDAmis * sizeof(long)); // On alloue de la mémoire pour le tableau

    Est ce que quelqun peut m'expliquer?? merci d'avance et merci a l'equipe du site c'est vraiment sympa de pouvoir apprendre comme sa.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 août 2006 à 15:48:55

      Vérifies que tu compiles bien en C et pas en C++. Et la prochaine fois cites ton erreur exactement.
      • Partager sur Facebook
      • Partager sur Twitter
        22 août 2006 à 16:15:08

        Merci c'est gentil mais on fait comment sur dev c++ pour qu'il compile en C et non C++ merci
        • Partager sur Facebook
        • Partager sur Twitter
          22 août 2006 à 16:20:42

          Ben quand tu crées un nouveau projet, tu sélectionnes Projet C au lieu de Projet C++
          • Partager sur Facebook
          • Partager sur Twitter
            22 août 2006 à 16:39:55

            Ou alors tu mets l'extension ".c" à ton fichier au lieu de ".cpp"...
            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2006 à 0:14:22

              Pense aussi à vérifier que tu as inclu <stdbli.h>. Chez moi ça provoque soit une erreur soit un warning je sais plus vraiment.
              • Partager sur Facebook
              • Partager sur Twitter
                23 août 2006 à 0:36:05

                A priori, un compilateur C renverait un warning, alors qu'un compilo C++ sort avec une erreur. C'est une question de typage. C est faiblement typé alors que C++ est un langage à typage fort.

                Pour eviter tout probleme, voila le code :
                ageAmis = (long *)( malloc(nombreDAmis * sizeof(long)) );
                ageAmis = static_cast<long *>( malloc(nombreDAmis * sizeof(long)) );


                edit : oublie des * après les long des casts. :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  23 août 2006 à 0:41:09

                  de plus, la fonction malloc() renvoie un void, mais generalement avec les int ou char, le compilateur nous fait pas chier, mais des qu'il est question de structures ou de types etranges, là, il faut caster

                  j'aurais jamais pensé que c'etait necessaire pour un long aussi o_O
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 août 2006 à 0:57:09

                    Bas en théorie, c'est necessaire avec tout ce qui n'est pas un int en C, puisque un cast void->int est implicite ; et necessaire avec TOUT même int en C++. ;)
                    Maintenant, entre norme et implémentation, il y a parfois, peut-être pas un monde, mais en tout cas un bon fossé. ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 août 2006 à 14:09:15

                      merci je vais essayer tout sa a+
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 août 2006 à 14:26:53

                        Le cast de la valeur de retour de malloc() est en C inutile.

                        De plus, il est de bon usage d'utiliser l'écriture sizeof *p pour désigner la taille de p, soit d'un élément du même type que p. Cela peut éviter notamment de devoir changer plusieurs fois le code si p change de type.

                        Bien utiliser malloc() - Emmanuel Delahaye (-ed-)

                        ++.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 août 2006 à 15:42:56

                          Citation : Aszarsha

                          Pour eviter tout probleme, voila le code :

                          ageAmis = (long *)malloc(nombreDAmis * sizeof(long));
                          ageAmis = static_cast<long *>( malloc(nombreDAmis * sizeof(long)) );

                          Euh pourquoi pas :
                          ageAmis = static_cast<long*>(::operator new(nombreDAmis * sizeof(long)));
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 août 2006 à 17:09:17

                            Parce que dans mon esprit, il s'agissais seulement de rajouter les éléments nécéssaires afin de compiler le code avec un compilo C++ ; tout est restant dans l'esprit C++ (sinon la ligne C marche aussi) mais sans changer de code. :)
                            Mais tu as tout à fait raison, en C++ stricte, c'est ton instruction qu'il faudrait employer. Bien que quelqu'un qui serait ammené à employer ton instruction dans un programme écrit en C++ peut se poser de sérieuses questions quand à la structure de son programme. ^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 août 2006 à 17:21:29

                              Citation : Aszarsha

                              Il s'agissait seulement de rajouter les éléments nécéssaires afin de compiler le code avec un compilo C++ ; tout en restant dans l'esprit C++.


                              Je suppose que tu veux dire "l'esprit C".

                              Citation : Aszarsha

                              Mais tu as tout à fait raison, en C++ strict, c'est ton instruction qu'il faudrait employer. Bien que quelqu'un qui serait ammené à employer ton instruction dans un programme écrit en C++ peut se poser de sérieuses questions quand à la structure de son programme ^^


                              Ah non, c'est utilisé pour des tas de méthodes assez avancé dont je t'épargnerai les détails, notament le placement new...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 août 2006 à 17:41:36

                                Citation : remram44

                                Ah non, c'est utilisé pour des tas de méthodes assez avancé dont je t'épargnerai les détails, notament le placement new...

                                Héhé, bien évidement, mais quelqu'un qui utilise ce type d'instruction sais déjà ce qu'il fait et quel structuration doit avoir son programme ! ;)
                                Je me suis placé dans le cas d'un zéro, même initié.
                                Peut être n'ai-je pas été assez clair. Ce n'est pas la première fois ou je parle dans l'esprit des zéros et ou je suis mal interprété. :-°

                                Il n'empeche que malgrès la bonne part de littérature que j'ai épluché en C++ je n 'ai que très rarement recontré ces instruction. Vraiment que très rarement !
                                Ce qui fait tu m'interresse pas mal là, en fait, j'aimerais justement que tu fasses tout sauf m'épargner les détails ! (on peux peut être continuer par MP, bien que ca puisse être instructif pour tout le monde ?)
                                Donne moi, si tu peux, des exemples de méthode ou des sources de lecture, parce que c'est toujours bon à prendre. ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                le tutos allocation dinamique en C

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown