Debug Error! am Programm Ende
-
Bißchen wenig Informationen... Overrun klingt wahrscheinlich, aber Du mußt uns Code zeigen, wo Du auf den Vector schreibend zugreifst, oder an der Belegung was änderst.
-
oder du kannst es mit einem Memory Debugger wie Valgrind versuchen.
(edit "ups, hab gerade gelesen, dass du ein Anfänger bist. Dann kann es natürlich sein, dass so ein Tool dich eher verwirrt.")
-
vector<vector<int> > a; a = vector<vector<int> > (m, vector<int>(m, 0)); for (int i=0; i<m; i++) for (int k=0; k<m; k++) p[i][k] = 2;Mehr nutze ich an sich nicht. Und das für mehrer Vektoren, teilweise statt 'int' 'double'.
Und die Inhalte werden im Programm mehrfach wieder verändert, z.B.:p[1][4] = 0;(..)
p[1][4] = 2;Mhmm?!
-
Was ist der Wert von m? Weißt du, dass die Indices mit 0 beginnen?
-
-
\aleph_0 schrieb:
Was ist der Wert von m?
Verschieden, je nach Programmaufruf, z.B. m = 6.
\aleph_0 schrieb:
Weißt du, dass die Indices mit 0 beginnen?
Ja, daran dürfte es nicht liegen.
-
Und wenn du erstmal .at() statt [] nimmst?
-
operator void schrieb:
Und wenn du erstmal .at() statt [] nimmst?
?!!
-
*vector::at
const_reference at(size_type pos) const;
reference at(size_type pos);
The member function returns a reference to the element of the controlled sequence at position pos.
If that position is invalid, the function throws an object of class out_of_range.
*Macht also fast das gleiche wie der []-Operator. Nur überprüft halt ob es ein Element
mit Position Pos überhaupt gibt. Wenn nicht wirft es ne Exception.
-
die std::vector<T>::at Funktion macht das gleiche wie der [] opertor nur wird überprüft ob du nicht über die Array Grenzen schreibst.
-
operator void schrieb:
Und wenn du erstmal .at() statt [] nimmst?
Wie sieht der Code konkret für einen doppelten Vektor wie oben aus?
-
// statt v[i] // schreibst du v.at(i)
-
Das ist mir klar, aber statt v[][] geht nicht v.at()(), oder?!
-
v.at().at();
-
Danke!! Ich hab den Fehler gefunden *freu*!
