2017-03-24 2 views
0

Dies ist eine einfache Funktion, die einen Vektor von Ganzzahlen verwendet und nur die ungeraden Einträge zusammenfasst.Warum erzeugt einfache C++ - Vektorfunktion einen Index außerhalb der Grenzen?

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

int f(vector<int> & n) 
{ 
    vector<int>::iterator itA; 

    int sum = 0; 
    for (itA = n.begin(); itA != n.end(); itA++) 
    { 
     if (*itA % 2 == 1) sum += *itA; 
    } 


    return sum; 
} 

int main() 
{ 
    vector<int> a; 
    a[0] = 3; 
    a[1] = 5; 
    a[2] = 6; 
    a[3] = 1; 
    cout << f(a) << endl; 
    system("pause"); 
} 

Sobald er ausgeführt wird, stürzt es aufgrund Vektorindex außerhalb des zulässigen Bereichs. Warum ist das der Fall? Der Iterator beginnt bei vector.begin() und durchläuft den Vektor, während der Iterator nicht auf vector.end() zeigt, was der gesamte Vektor sein sollte.

+0

Sie haben nicht die Größe des Vektors definiert, bevor es mit oder auch Funktion von Vektor-Container verwenden push_back – Sumeet

+0

'Vektor a = {3, 5, 6, 1} ; 'wäre etwas einfacher, nicht zu erwähnen; würde eigentlich funktionieren;) –

Antwort

2

vector<int> a; erstellt einen leeren Vektor, und da sie leer ist (dh keine Elemente hat), mit a[index] die Elemente Zugriff ist immer out-of-bounds Zugang, die zu undefinierten Verhalten führt, und in Ihrem Fall ein Absturz . Verwenden Sie push_back oder emplace_back, um Elemente an den Vektor anzuhängen.

1

Dies wird Ihr Problem lösen:

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

int f(vector<int> & n) 
{ 
    vector<int>::iterator itA; 

    int sum = 0; 
    for (itA = n.begin(); itA != n.end(); itA++) 
    { 
     if (*itA % 2 == 1) sum += *itA; 
    } 


    return sum; 
} 

int main() 
{ 
    vector<int> a(4); 
    a[0] = 3; 
    a[1] = 5; 
    a[2] = 6; 
    a[3] = 1; 
    cout << f(a) << endl; 
    system("pause"); 
} 
Verwandte Themen