initialisation d'une matrice en c++

initialisation d'une matrice en c++ - C++ - Programmation

Marsh Posté le 29-07-2013 à 05:03:12    

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
Reply

Marsh Posté le 29-07-2013 à 05:03:12   

Reply

Marsh Posté le 02-08-2013 à 14:25:02    

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
Reply

Marsh Posté le 05-08-2013 à 19:16:31    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed