web-dev-qa-db-fra.com

Debug assertion a échoué. Indice de vecteur C++ hors limites

le code suivant remplit le vecteur avec 10 valeurs en premier pour la boucle. en seconde pour la boucle, je veux que les éléments du vecteur soient imprimés . La sortie est exécutée jusqu'à la déclaration de cout avant la boucle j.

#include "stdafx.h"
#include "iostream"
#include "vector"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{   vector<int> v;

    cout<<"Hello India"<<endl;
    cout<<"Size of vector is: "<<v.size()<<endl;
    for(int i=1;i<=10;++i)
    {
        v.Push_back(i);

    }
    cout<<"size of vector: "<<v.size()<<endl;

    for(int j=10;j>0;--j)
    {
        cout<<v[j];
    }

    return 0;
}
10
Abhishek Jain

Quel que soit le mode d’indexation des repoussements, votre vecteur contient 10 éléments indexés à partir de 0 (0, 1, ..., 9). Donc, dans votre deuxième boucle, v[j] est invalide, lorsque j est 10.

Cela corrigera l'erreur:

for(int j = 9;j >= 0;--j)
{
    cout << v[j];
}

En général, il est préférable de penser aux index comme étant basés sur 0. Je vous suggère donc de remplacer également votre première boucle par ceci:

for(int i = 0;i < 10;++i)
{
    v.Push_back(i);
}

De plus, pour accéder aux éléments d'un conteneur, l'approche idiomatique consiste à utiliser des itérateurs (dans ce cas: un itérateur inversé):

for (vector<int>::reverse_iterator i = v.rbegin(); i != v.rend(); ++i)
{
    std::cout << *i << std::endl;
}
10
BartoszKP

v a l'élément 10, l'index commence de 0 à 9

for(int j=10;j>0;--j)
{
    cout<<v[j];   // v[10] out of range
}

vous devriez mettre à jour la boucle for

for(int j=9; j>=0; --j)
//      ^^^^^^^^^^
{
    cout<<v[j];   // out of range
}

Ou utilisez reverse iterator pour imprimer l'élément dans l'ordre inverse

for (auto ri = v.rbegin(); ri != v.rend(); ++ri)
{
  std::cout << *ri << std::endl;
}
5
billz

ce type d'erreur se produit généralement lorsque vous essayez d'accéder aux données via l'index dans lequel les données n'ont pas été affectées. par exemple 

//assign of data in to array
for(int i=0; i<10; i++){
   arr[i]=i;
}
//accessing of data through array index
for(int i=10; i>=0; i--){
cout << arr[i];
}

le code donnera une erreur (indice de vecteur en dehors des limites) parce que vous accédez à l'arr [10] qui n'a pas encore été assigné. 

0
suraj kumar