Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Access violation bei zugriff auf private Attribute (VC++)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.03.2005, 11:48 Uhr
ABC_Freak



Hi Leute,

um gleich zur sache zu kommen folgendes Problem:

Ich habe eine Klasse Converter2d mit einer Methode:

C++:
Point Converter2d::calcRelative(const Point & pt){
    double x = (pt.getX()-centerX)/centerY; // centerY is not only the y center position but the length of 1.0
    double y = (pt.getY()-centerY)/centerY;
    return Point(x,y);
}//*/



beim aufruf der Methode:

C++:
Point pStart(1.0,1.0); // eigentlich natuerlich ein wenig komplexer...
imgConverter.calcRelative(pStart);



kriege ich im Debuger folgende exception gleich bei der ersten zeile (nach pt.getX() da getX() auch const is also geht das zumindes in ordnung):
Unhandled exception at 0x004358e4 in test4.exe: 0xC0000005: Access violation reading location 0x00000010

anscheinend tritt dieser fehler auf bei einem zugriff auf die Attribute... ich hab keinen peil warum. Das ganze projekt einfach neu bauen hilft auch nix.

was soll ich also machen wenn ein Object schon nich mehr auf seine eigenen privaten attribute zugreifen darf?
(nebenbei: es sind alle attribute richtig belegt und der eingegebene Point ist auch komplett inizialisiert, es ist auch nix NULL)
Liegts an mir (wahrscheinlich) oder am compiler?

der header dazu:

C++:
class Converter2d
{
public:
    Converter2d(int imgWidth, int imgHeight);
    Converter2d(Image & img);
    virtual ~Converter2d(void);
    Point calcAbsolute(const Point & pt);
    Point calcRelative(const Point & pt);
private:
    int width; // the absolute width of the image
    int height; // the absolute height of the image
    double centerX; // the absolute x position of the center
    double centerY; // the absolute y position of the center
    double fac; // the relation between width and height
};



Danke im Vorraus...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.03.2005, 12:58 Uhr
typecast
aka loddab
(Operator)


Also das Objekt darf schon auf seine privaten Elemente zugreifen.
Sonst wuerde dein Projekt nicht kompiliert.

Kann es sein, dass centerY == 0 ist?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.03.2005, 13:16 Uhr
ABC_Freak



ach ich habs...

this == NULL :-)

ein object das nich existiert kann keinen zugriff machen... zu doof

Trotzdem danke (deine signatur stimmt leider auch in meinem fall)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.03.2005, 13:31 Uhr
typecast
aka loddab
(Operator)


Eigentlich muesste der Fehler in der Zeile


C++:
imgConverter.calcRelative(pStart);



kommen. Und nicht in der Funktion *denk*
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 03.03.2005 um 13:31 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.03.2005, 13:35 Uhr
ABC_Freak



tja waere das der fall gewesen haette ichs sofort gesehen... so war der fehler beim ersten zugriff auf die attribute.

er konnte die Methode (nicht statisch) finden die attribute sind aber falsche somit ging der sprung in die methode noch zugriffe auf eigene attribute scheitern aber.

ist mir auch ein raetsel aber seitdem ich es auch hatte das einige meiner zeilen einfach uebersrpungen wurden (ohne if, einer schleife oder goto) glaub ich an alles (gruene maenchen auf dem mars eingeschlossen) :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.03.2005, 09:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


pass aber auch auf was typecast schon sagte, das centery nicht 0 ist, sonst kriegste ne division durch null. evtl einfach ein if(centery != 0) in die funktion rein. (Sicher ist sicher)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.03.2005, 09:36 Uhr
ABC_Freak



ich schmeiss schon im konstructor ne exception wenn was nicht passt. Normalerweise schau ich das ich keine ungueltigen objekte rumlaufen hab... da haben sich solche sachen schon erledigt (ein if(centery!=0) ueberall wo ichs in einer division brauch is mir zu unuebersichtlich)

trotzdem thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.03.2005, 12:26 Uhr
typecast
aka loddab
(Operator)


Is auch nicht notwenig. Du must eigentlich nur beim setzen der Variable darauf achten, dass sie nicht 0 wird
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.03.2005, 12:41 Uhr
ABC_Freak



naja sie darf ja nur beim konstruktor gesetzt werden (an sich ist das object nicht veraenderbar sondern wird nach dem erstellen nur benutzt, gibts auch n Muster dafuer "Immutable" (wie der name schon sagt :-) ) )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: