erreur à la compilation

erreur à la compilation - C - Programmation

Marsh Posté le 16-11-2005 à 15:24:39    

Bonjour,
voila je sais plus trop si c'est du C ou du C++ car en cours on passe souvent de l'un a l'autre.
voila j'ai realisé un tableau dynamique. lors de la compilation(je travail sous linux et je compile dans la console) j'ai ce genre d'erreur et j'arrive pas a savoir d'ou elle vient.
collect2: ld terminé par le signal 11 [Erreur de segmentation]
Quelqu'un peux m'aider???? :??:

Reply

Marsh Posté le 16-11-2005 à 15:24:39   

Reply

Marsh Posté le 16-11-2005 à 15:26:24    

montre ton code mais a priori c'est un bug de ton ld, donc faut mettre à jour si tu peux.

Reply

Marsh Posté le 16-11-2005 à 15:41:33    

Code :
  1. #include<cstdlib>
  2. #include<cstdio>
  3. #include<iostream>
  4. #include"tab.h"
  5. #define Elem int
  6. TableauDynamique::TableauDynamique()
  7. {
  8. this->tailleReelle=0;
  9. this->tailleUtilisee=0;
  10. this->donnees=NULL;
  11. }
  12. TableauDynamique::TableauDynamique(int n)
  13. {
  14. this->tailleReelle=n;
  15. this->tailleUtilisee=0;
  16. this->donnees=new Elem[n];
  17. }
  18. TableauDynamique::TableauDynamique(TableauDynamique &td)
  19. {
  20.   this->tailleReelle=td.tailleReelle;
  21.   this->tailleUtilisee=td.tailleUtilisee;
  22.   this->donnees=new int[this->tailleReelle];
  23.   int i=0;
  24.   while(i<this->tailleUtilisee)
  25.     this->donnees[i]=td.donnees[i];
  26. }
  27. TableauDynamique::~TableauDynamique()
  28. {
  29.   delete this->donnees;
  30. }
  31. TableauDynamique & TableauDynamique::operator = (const TableauDynamique &td)
  32. {
  33.   this->tailleReelle=td.tailleReelle;
  34.   this->tailleUtilisee=td.tailleUtilisee;
  35.   delete this->donnees;
  36.   this->donnees=td.donnees;
  37.   return (*this);
  38. }
  39. int tailleUtilisee(const TableauDynamique &td)
  40. {
  41.   return(td.tailleUtilisee);
  42. }
  43. void ajoutElement(TableauDynamique &td,const Elem &e)
  44. {
  45.   if(td.tailleUtilisee<td.tailleReelle)
  46.     {
  47.       td.donnees[td.tailleUtilisee]=e;
  48.       td.tailleUtilisee++;
  49.     }
  50.   else
  51.     {
  52.       int*temp=new int[td.tailleUtilisee+1];
  53.       int i=0;
  54.       while(i<td.tailleUtilisee)
  55. {
  56.   temp[i]=td.donnees[i];
  57.   i++;
  58. }
  59.       temp[i]=e;
  60.       delete td.donnees;
  61.       td.donnees=temp;
  62.       td.tailleReelle++;
  63.       td.tailleUtilisee++;
  64.     }
  65. }
  66. void insereElement(TableauDynamique &td, const Elem &e, int i)
  67. {
  68.   ajoutElement(td,e);
  69.   int j=td.tailleUtilisee-1;
  70.   if (i<0)
  71.     {
  72.       printf("Erreur : position négative, l'élément n'a pas été inséré.\n" );
  73.     }
  74.   else
  75.     {
  76.       while(j>i)
  77. {
  78.   td.donnees[j]=td.donnees[j-1];
  79.   j--;
  80. }
  81.       if(i>td.tailleUtilisee)
  82. {
  83.   printf("Dépassement de capacité, l'élément sera inséré en fin." );
  84. }
  85.       else
  86. td.donnees[i]=e;
  87.     }
  88. }
  89. void afficher(TableauDynamique &td)
  90. {
  91. int i=0;
  92. while(i<td.tailleUtilisee)
  93.    printf("%d ", td.donnees[i]);
  94. printf("\n" );
  95. }


Code :
  1. int main()
  2. {
  3.   Elem e=3;
  4.   int i=1;
  5.   TableauDynamique td;
  6.   afficher(td);
  7.   ajoutElement(td,e);
  8.   insereElement(td,e,i);
  9.   afficher(td);
  10.   e=12;
  11.   i=4;
  12.   ajoutElement(td,e);
  13.   insereElement(td,e,i);
  14.   afficher(td);
  15.   e=15;
  16.   i=3;
  17.   ajoutElement(td,e);
  18.   insereElement(td,e,i);
  19.   afficher(td);
  20. }


Et le Header:

Code :
  1. #define Elem int
  2. struct TableauDynamique
  3. {
  4.   int tailleReelle;
  5.   int tailleUtilisee;
  6.   Elem *donnees;
  7.  
  8.  
  9.   TableauDynamique();
  10.   TableauDynamique(int n);
  11.   TableauDynamique(TableauDynamique &td);
  12.   ~TableauDynamique();
  13.   TableauDynamique& operator=(const TableauDynamique &td);
  14. };
  15. int tailleUtilisee(const TableauDynamique &td);
  16. void ajoutElement(TableauDynamique &td, const Elem &e);
  17. void insereElement(TableauDynamique &td,const Elem &e,int i);
  18. void afficher(TableauDynamique &td);

Reply

Marsh Posté le 16-11-2005 à 16:14:43    

Dès la première ligne on sait que c'est du C++
#include <cstdlib> (pas de .h)

Reply

Marsh Posté le 16-11-2005 à 16:28:35    

Comment ca pas de .h j'en ai bien un associé au .c. Celui qui contient la structure!!!!

Reply

Marsh Posté le 16-11-2005 à 16:41:50    

Ce qu'a voulu dire Trap D, c'est qu'en C on aurait écrit :

#include <stdlib.h>


 
Alors qu'en C++, on écrit :

#include <cstdlib>


(on ne précise plus le ".h", et le "c" en préfixe indique qu'il s'agit d'un header C et non C++, au contraire d'iostream par exemple)

Reply

Marsh Posté le 18-11-2005 à 16:34:41    

Je ne peux pas mettre a jour mon ld suis pas admin à la fac!

Reply

Marsh Posté le 18-11-2005 à 16:36:06    

J'ai déjà eu des erreurs du genre avec ld, c'est peut-être un bug dans le sens où comme message d'erreur, on a clairement vu mieux, mais ça doit se résoudre sans toucher au programme.
 
Je ne me souviens plus comment j'ai eu ce problème, sans doute un paramètre de compilation incorrect, genre une lib manquante ou un truc dans ce goût-là.

Reply

Marsh Posté le 18-11-2005 à 18:03:45    

Soit dit en passant ce genre de chose "this->donnees=new Elem[n];" avec n pouvant être négatif est source de problème à l'exécution

Reply

Marsh Posté le 18-11-2005 à 18:16:43    

Tout a fait d'accord avec toi slash33 j'ai oubliée de le remettre mais bon ca regle pas le probleme

Reply

Sujets relatifs:

Leave a Replay

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