Pour une raison quelconque, mon implémentation permet un accès au tableau de taille 0 à la position 0 et un accès au tableau de taille 5 à la position 50. Alors que les deux positions doivent me rapporter une erreur de segmentation pour mon point de vue. Je pense que cela peut peut-être être causé par une mauvaise allocation de la mémoire mais de mon côté, cela semble correct, quelqu'un peut me dire pourquoi j'obtiens ce résultat.

Mon code pour le tableau :

class vector{
 private:
  int length;
  int cap;
  T* arr;
 public:

  vector(int n){
   arr = new T[n];
   length = n;
   cap = n;
  }

  vector():vector(0){};

  vector(vector<T> & other){
   arr = new T[other.size()];
   length = other.size();
   cap = other.capacity();
  }
  ~vector(){
   delete[] arr;
  }

  T& operator[](int ind) {
   return arr[ind];
  }

  const T& operator[](int ind) const{
   return arr[ind];
    }
};

Mon test:

 int main(int argc, char* argv[])
 {
  vector<int> v;
  v[0] = 5;
  vector<int> v2(5);

  std::cout<<v2[50]<<" "<<v[0]<<std::endl;
 }

Production:

  0 0
0
warwcat 4 juil. 2016 à 21:41

1 réponse

Vous ne vérifiez pas les paramètres de votre fonction.

Ce que vous devriez faire, c'est quelque chose comme

T& operator[](int ind) {
    if(ind >= 0 && ind < length)
        return arr[ind];
    else
        throw(std::out_of_range("vector"));
}
0
Ivan Rubinson 4 juil. 2016 à 22:00