Partage
  • Partager sur Facebook
  • Partager sur Twitter

difference entre c **q=new c*[5] et c*q=new c[5] ?

    17 janvier 2018 à 23:34:07

    Bonjour.

    Tout est dans le titre, j'ai du mal a voir la différence entre       c **q=new c*[5]              et            c*q=new c[5] .

    Quelle déclaration permet de créer un tableau de pointeurs ?

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2018 à 0:13:42

      La premiere solution, cela cree un tableau de 5 pointeurs sur c.

      La seconde cree juste un tableau de c.

      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2018 à 8:15:41

        This is not C++ :p
        • Partager sur Facebook
        • Partager sur Twitter

        Si vous ne trouvez plus rien, cherchez autre chose.

          18 janvier 2018 à 8:44:27

          Aucune : il ne faut utiliser aucun des deux en C++.

          -
          Edité par Ksass`Peuk 18 janvier 2018 à 8:53:13

          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            18 janvier 2018 à 14:07:00

            En fait, j'essaye d’implémenter un graph par la méthode de la liste d'adjacence mais j'ai visiblement un problème lorsque j'essaye d'initialiser ce graph dans le constructeur puisque lorsque j’appelle la méthode addEdge, j'ai une erreur du type read access violation.

            voici mon fichier h:

            #include<list>
            #include <queue>
            #include <iostream>
            class Graph
            {
            public:
            	Graph(int vertices);
            	~Graph();
            	void addEdge(int weight, int source, int destination);
            	/*void breadthFirstTraversal(int source);*/
            
            private:
            	int v;
            	std::list<std::pair<int, int>> **x;
            };
            

            et voici mon fichier cpp:

            Graph::Graph(int vertices) : v(vertices)
            {
            	x= new list<pair<int, int>>*[v];
            	for (int i = 0; i < v; i++)
            	{
            		x[i] = new list<pair<int, int>>;
            	}
            	
            }
            Graph::~Graph()
            {
            }
            void Graph::addEdge(int weight, int source, int destination)
            {
            	x[source]->push_back(make_pair(weight, destination));
            	x[destination]->push_back(make_pair(weight, source));
            }

            Pourriez vous m'aider ? Merci.

            • Partager sur Facebook
            • Partager sur Twitter
              18 janvier 2018 à 14:11:58

              On n'alloue jamais std::list avec new. Ici, vire simplement tes pointeurs et tes new :

              class Graph
              {
                /* ... */
               
              private:
                  int v;
                  std::list<std::pair<int, int>> x;
              };
              Graph::Graph(int vertices) : 
                v(vertices),
                x(v)
              {
                    
              }
              
              • Partager sur Facebook
              • Partager sur Twitter

              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                18 janvier 2018 à 14:36:48

                cette déclaration ne serait donc pas non plus valide ?

                private:
                	int v;
                	std::list<std::pair<int, int>> *x;
                };
                


                fichier cpp:

                Graph::Graph(int vertices) : v(vertices)
                {
                	x= new list<pair<int, int>>[v];
                }
                Graph::~Graph()
                {
                }
                void Graph::addEdge(int weight, int source, int destination)
                {
                	x[source].push_back(make_pair(weight, destination));
                	x[destination].push_back(make_pair(weight, source));
                }

                pourtant lorsque je compile cela fonctionne.

                • Partager sur Facebook
                • Partager sur Twitter
                  18 janvier 2018 à 14:39:14

                  Hey,

                  Tu peux mais ca ne sert a rien.

                  Pourquoi te faire chier avec des pointeurs alors que tu peux faire sans?

                  En C++ les pointeurs sont problematique, particulierement parce que le langage est un langage a exception. Autant les eviter un maximum.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Architecte logiciel - Software craftsmanship convaincu.

                    19 janvier 2018 à 8:47:03

                    Tu peux, mais ton code est la preuve qu'il ne faut pas le faire quand on ne connait pas : tu as un bon gros memory leak sur ta classe...

                    EDIT:

                    Même en connaissant (encore plus en connaissant, d'ailleurs), on ne le fait pas

                    -
                    Edité par dragonjoker 19 janvier 2018 à 8:47:39

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Si vous ne trouvez plus rien, cherchez autre chose.

                    difference entre c **q=new c*[5] et c*q=new c[5] ?

                    × 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