Debug-bevestiging mislukt. C++ vectorsubscript buiten bereik

de volgende code vult de vector met 10 waarden in eerste voor lus. in tweede voor lus wil ik dat de elementen van vector worden afgedrukt.
De uitvoer is tot de cout-instructie vóór de j-lus. Geeft een fout van het vectorsubscript buiten het bereik.

#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;
}

Antwoord 1, autoriteit 100%

Ongeacht hoe u de pushbacks indexeert, uw vector bevat 10 elementen die zijn geïndexeerd vanaf 0 (0, 1, …, 9). Dus in je tweede lus is v[j] ongeldig, wanneer j 10 is.

Hiermee wordt de fout verholpen:

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

Over het algemeen is het beter om indexen te beschouwen als 0-gebaseerd, dus ik raad je aan om ook je eerste lus hierin te veranderen:

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

Ook om toegang te krijgen tot de elementen van een container, is de idiomatische benadering het gebruik van iterators (in dit geval: een omgekeerde iterator):

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

Antwoord 2, autoriteit 36%

v heeft een 10 element, de index begint van 0 tot 9.

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

je moet de for loop updaten naar

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

Of gebruik omgekeerde iterator om het element in omgekeerde volgorde af te drukken

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

Antwoord 3, autoriteit 14%

dit type fout treedt meestal op wanneer u probeert toegang te krijgen tot gegevens via de index waaraan geen gegevensgegevens zijn toegewezen.
bijvoorbeeld

//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];
}

de code geeft een foutmelding (vectorsubscript buiten bereik)
omdat je toegang hebt tot de arr[10] die nog niet is toegewezen.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes