Liste: violent access
- 
					
					
					
					
 Hallo. 
 Kann mir einer sagen was hier fehlt?
 Warum das Programm bei Aufruf der Get-Funktion
 eine violent access gibt:**#include "stdafx.h" 
 #include <math.h>
 #include <stdio.h>
 #include <cstdlib>
 #include <vector>
 using namespace std;class CKoerperVector 
 {private: vector<double> PointxObj; 
 vector<double> PointyObj;public: void SetPoint(double* pdX, double* pdY, int index) 
 {
 PointxObj.push_back(*pdX);
 PointyObj.push_back(*pdY);
 }void GetPoint(double* pdX, double* pdY, int index) 
 {
 *pdX = PointxObj[index];
 *pdY = PointyObj[index];
 }}; 
 **
 (Weiß leider nicht mehr wie man den code weiß einlegt )
 http://www.c-plusplus.net/forum/images/smiles/confused.gif
  
 Die Methoden sind im Header inline
 Ich würd mich sehr freuen wenn sich mir Anfänger einer
 annehmen würde. http://www.c-plusplus.net/forum/images/smiles/smile.gif
  
 crios
 
- 
					
					
					
					
 Du hast recht das ist violent access ( wilder Zugriff ). 
 Ohne Scherz. Aus deinem code ist ist nicht ersichtlich warum es zur Zugriffsverletzung kommt.
 Ungut ist dass du bei SetPoint die Werte immer hinten anhängst => index wird ignoriert.
 Natürlich bekommst du dann eine access violation wenn du z.b einmal SetPoint aufrufst und dann GetPoint mit index = 1.
 K
 
- 
					
					
					
					
 Vielleicht hilft es ja wenn du in GetPoint() mal auf einen gültigen Index 
 überprüfst. Das macht der Operator[] von vector nämlich nicht von selbst. Das macht der Operator[] von vector nämlich nicht von selbst.
 Wenn du das willst/erwartest musst du at() verwenden.
 
- 
					
					
					
					
 Ich hab den Index untersucht. 
 Er kommt mit 0 rein.
 
- 
					
					
					
					
 Die Liste wird aber laut Debugger 
 gefüllt. Ich hab zuerst vermutet
 dass die Liste garnicht gefüllt.
 wird
 crios
 
- 
					
					
					
					
 kann mich meinen vorgaengern nur anschliessen: ZuK schrieb: Aus deinem code ist ist nicht ersichtlich warum es zur Zugriffsverletzung kommt also wenn wir dir helfen sollen brauchen wir die relevanten code teile. 
 das der debugger sagt die liste sei gefuellt hilft nicht viel.
 
- 
					
					
					
					
 criosj schrieb: Die Liste wird aber laut Debugger 
 gefüllt. Ich hab zuerst vermutet
 dass die Liste garnicht gefüllt.
 wird
 criosWernn das so ist dann kanns nur mehr dran liegen wie du GetPoint() aufrufst. 
 Könnte es so sein ?double * px, *py; // pointer zeigen ins nirvana. GetPoint(px, py, 0);Kurt 
 
- 
					
					
					
					
 wenn's so ist wie ZuK vermutet: double *px=new double,*py=new double; x.GetPoint(px,py,0);
 
- 
					
					
					
					
 Arbeite besser mit Referenzen als mit (möglicherweise dangling) Pointern, also z.B. void AddPoint(const double &dX, const double &dY) { PointxObj.push_back(dX); PointyObj.push_back(dY); } void SetPoint(const double &dX, const double &dY, int index) { PointxObj.at(index) = dX; PointyObj.at(index) = dY; } void GetPoint(double &dX, double &dY, int index) { dX = PointxObj[index]; dY = PointyObj[index]; }"at" wirft eine Exception bei Bereichsüberschreitung Aufruf dann mit double px, py; x.AddPoint(24, 42); x.SetPoint(13, 17, 0); x.GetPoint(px,py,0); <- gibt (13, 17) zurück
 
- 
					
					
					
					
 Das veruch ich mal 
 
- 
					
					
					
					
 Ich hab es ausprobiert. 
 (Den Code von Th.
 Jetzt kommt der Fehler schon beim Setzen der Punkte
 mit SetPoint.
 Vielleicht funktioniert der Index nicht
 Der ist beim Aufruf 0.
 MfG