Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2480 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  initialisation d'une matrice en c++

 

Sujet(s) à lire :
    - Visual C++
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

initialisation d'une matrice en c++

n°2198948
manel1989
Posté le 29-07-2013 à 05:03:12  profilanswer
 

Salut tout le monde !
 
j'aimerai bien résoudre le problème d’initialisation d'une  matrice en c++ ci-dessous vous trouvez mon code du .h :

Code :
  1. public:
  2.  ReadEnvironmentXML();
  3.  int lire_size();
  4.   int search_index (std::vector<std::string> v, std::string name);
  5.  std::vector<std::string> lire_Nodes();
  6.  int**  lire_Links();
  7.  std::vector<int> lire_RAM();
  8.  std::vector<int> lire_BAT() ;
  9.  std::vector<int> lire_CPU();
  10.  int** lire_Links_val();
  11.  std::vector<int>  lire_MaxP(); 
  12.      int subString (const char *chaine, int debut, int fin, char *result);
  13.  ~ReadEnvironmentXML();
  14. protected:
  15.  int** edges;
  16.  int** link_val;
  17.  std::vector<std::string> nodes_names;


et maintenant le .cpp

Code :
  1. ReadEnvironmentXML::ReadEnvironmentXML()
  2. {
  3. link_val[6][6];
  4.  //initialyze the matrix to zero
  5. for (int i=0; i<6;i++)
  6.   {
  7.    for (int j=0; j<6;j++)
  8.    link_val[i][j]=0;
  9.         }
  10. }
  11. int ReadEnvironmentXML::lire_size()
  12. { int size=0;
  13. TiXmlDocument doc;
  14. if(!doc.LoadFile("C://Users//abdelhalim//Desktop//manel Pfe//Environment.xml" ))
  15. {
  16. cerr << doc.ErrorDesc() << endl;
  17. }
  18. TiXmlElement* root = doc.FirstChildElement();
  19. if(root == NULL)
  20. {
  21.  cerr << "Failed to load file: No root element." << endl;
  22.  doc.Clear();
  23. }
  24. for(TiXmlElement* elem = root->FirstChildElement("Nodes" ); elem != NULL; elem = elem->NextSiblingElement("Nodes" ))
  25.   {
  26.   const char* attri;
  27.   attri = elem->Attribute("number" );
  28.   if(attri != NULL)
  29.    {
  30.     string f = attri;
  31.           //casting de attri au size
  32.     std::istringstream iss( f );
  33.     iss >> size;
  34.       }
  35.   }
  36.   cout << "le size est " << size << endl;
  37. return size;
  38. }
  39. int ReadEnvironmentXML::search_index (vector<string> v, string name)
  40. {
  41. int index=-1;
  42.  for (int i=0; i<v.size();i++)
  43.  {
  44.   if (v.at(i)==name)
  45.    index=i;
  46.  }
  47.  return index;
  48. }
  49. vector<string> ReadEnvironmentXML::lire_Nodes()
  50. {
  51. vector <string> nodes;
  52. TiXmlDocument doc;
  53. if(!doc.LoadFile("C://Users//abdelhalim//Desktop//manel Pfe//Environment.xml" ))
  54. {
  55.  cerr << doc.ErrorDesc() << endl;
  56. }
  57. TiXmlElement* root = doc.FirstChildElement();
  58. if(root == NULL)
  59. {
  60.  cerr << "Failed to load file: No root element." << endl;
  61.  doc.Clear();
  62. }
  63. for(TiXmlElement* elem = root->FirstChildElement("Nodes" ); elem != NULL; elem = elem->NextSiblingElement("Nodes" ))
  64. {
  65.     for(TiXmlElement* e = elem->FirstChildElement("Node" ); e != NULL; e = e->NextSiblingElement("Node" ))
  66.     {
  67.      const char* attri;
  68.      attri = e->Attribute("name" );
  69.         if(attri != NULL)
  70.            {
  71.              nodes.push_back(attri);
  72.            }
  73.     }
  74.  }
  75. cout << "le vecteur des noeuds est" << endl;
  76.  for (int j=0; j<nodes.size();j++)
  77.   cout << nodes.at(j) << " " << endl;
  78. return nodes;
  79. }
  80. int** ReadEnvironmentXML::lire_Links_val()
  81. {
  82. string u,v,f;
  83. nodes_names= lire_Nodes();
  84.  TiXmlDocument doc;
  85. if(!doc.LoadFile("C://Users//abdelhalim//Desktop//manel Pfe//Environment.xml" ))
  86. {
  87.  cerr << doc.ErrorDesc() << endl;
  88. }
  89. TiXmlElement* root = doc.FirstChildElement();
  90. if(root == NULL)
  91. {
  92.  cerr << "Failed to load file: No root element." << endl;
  93.  doc.Clear();
  94. }
  95. for(TiXmlElement* elem = root->FirstChildElement("Links" ); elem != NULL; elem = elem->NextSiblingElement("Links" ))
  96.  {
  97.    for(TiXmlElement* e = elem->FirstChildElement("link" ); e != NULL; e = e->NextSiblingElement("link" ))
  98.         {  vector<int> links;
  99.               const char* attri;
  100.              attri = e->Attribute("from" );
  101.                 if(attri != NULL)
  102.                     {
  103.          cout << " le lien entre le noeud  " << attri << endl;
  104.                   u=attri;
  105.               }
  106.        attri = e->Attribute("to" );
  107.        if ( attri != NULL)
  108.        {
  109.          cout << "et le noeud  " << attri << endl;
  110.                v=attri;
  111.           }
  112.        attri = e->Attribute("bandwidth" );
  113.        if ( attri != NULL)
  114.        {
  115.         cout << " la valeur du bande passante entre eux est " << attri << endl;
  116.               f=attri;
  117.           }
  118.        //soustraire l'entier du bande passante de la string et faire le casting de string au entier  
  119.        int m=5;
  120.        link_val[search_index(nodes_names,u)][search_index(nodes_names,v)]=m;
  121.                    link_val[search_index(nodes_names,v)][search_index(nodes_names,u)]=m;
  122.    }
  123.  }
  124.  for (int i=0; i<nodes_names.size();i++)
  125.  {
  126.   for (int j=0; j<nodes_names.size();j++)
  127.    cout << link_val[i][j] << " " << endl;
  128.  }
  129.  return link_val;
  130. }

il m'indique l'erreur suivante :Violation d'accès lors de la lecture de l'emplacement 0xcccccccc au niveau de cette ligne de code :

Code :
  1. link_val[search_index(nodes_names,u)][search_index(nodes_names,v)]=m;


 
je sais pas quoi faire pour résoudre ce problème ???  
j'ai une autre question : qu'est ce que je dois faire pour initialiser ma matrice link_val par  nodes_names.size()???? c'est ça également ce que je veux , mais puisque nodes_names.size() va être défini au cours de la classe . cpp donc je sais pas quoi faire  
 
se que je veux est le suivant :

Code :
  1. nodes_names= lire_Nodes();
  2. int** link_val;
  3. link_val[nodes_names.size()][nodes_names.size()];

 
 
lorsque je fait ça , il me dit que ma matrice est utilisé sans qu'elle est initialisé ?????????????????????
 
Merci beaucoup pour votre aide :)


---------------
when there is a will there is a way
mood
Publicité
Posté le 29-07-2013 à 05:03:12  profilanswer
 

n°2199258
theshockwa​ve
I work at a firm named Koslow
Posté le 02-08-2013 à 14:25:02  profilanswer
 

Si tu as un cours sous le coude, revois les passage sur la déclaration et l'initialisation des variables, les pointeurs et les allocations dans le tas et la pile. Ca t'aidera à comprendre ton message d'erreur que tu cites à la fin.
 
Ce sont les bases, on ne peut pas t'aider sainement si tu ne comprends pas ces points là ...


---------------
last.fm
n°2199459
Joel F
Real men use unique_ptr
Posté le 05-08-2013 à 19:16:31  profilanswer
 

en C++, la memoire ne s'alloue pas, on utilise std::vector. Ce code est du C merdique.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  initialisation d'une matrice en c++

 

Sujets relatifs
Appel d'une matrice dans une fonctionElements Finis : Assemblage matrice
Quadrature de Gauss sur une matriceinitialisation automatique de classe ? [résolu]
comment recupurer les valeurs d'une matrice dans une classe exterieurmatrice vectore rechairche
matrice inverse 4x4 en cInitialisation dans une fonction d'une matrice de pointeur
Initialisation à zéro d'une grosse matrice en C[c] probleme initialisation matrice
Plus de sujets relatifs à : initialisation d'une matrice en c++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR