Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » char-variable - Zugriffsverletzung-leseposition

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
08.12.2003, 12:31 Uhr
dad_an_der_fh



Hallo,

vorab, ich bin nicht gerade der beste in c-programmieren.
Nun sitze ich jetzt schon 2 Tage an einem Problem.

Ich hab eine Variable vconf, die ich in meiner Funktion mit
einem String füllen will. Jedoch erscheint beim Ausführen folgende
Fehlermeldung:

Unbehandelte Ausnahme bei 0x0046868e in MeinProg.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xcdcdcdd9.

und er verweist auf strcpy und auf xsize und ysize und zoom.

Was mach ich falsch?
Alles andere geht.


Der Quellcode:

C++:
//Init_App-header
class Init_App
{
public:
  Init_App();
  void Init_Grab_Size(unsigned char taste);

  int xsize;
  int ysize;
  int zoom; //1 normal/2 2time/3 3time

  char *vconf;
  ...
};

//Init_App.cpp
Init_App::Init_App()
{
  vconf = new char[34];
  .....
}
void Init_App::Init_Grab_Size(unsigned char taste)
{
switch (taste) {
   case '1' :
     strcpy( vconf, "-width=192 -height=144 -channel=1" );
     xsize = 192;
     ysize = 144;
     zoom = 4;
   break;
     ......
   default:
     strcpy( vconf, "-width=384 -height=288 -channel=1" );
     xsize = 384;
     ysize = 288;
     zoom = 2;
  }
}


Dieser Post wurde am 08.12.2003 um 12:48 Uhr von dad_an_der_fh editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2003, 13:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hm ich kann so kein fehler entdecken....
warum nimmst du nicht gleich ein char vconf[34]. das mit dem allokieren macht doch eigentlich keinen sinn wenn du sowieso immmer grösse 34 hast.
es schadet auch nicht wenn du gleich ein char vconf[100] nimmst, dann hast du nicht so schnell einen overflow, den fängt strcpy nämlich nicht ab

du könntest dir die string übringens auch ausserhalb deiner switchanweisung mit sprintf basteln

C++:
sprintf(vconf,"-width=%d -height=%d -channel=%d",xsize ,ysize,1);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2003, 13:38 Uhr
dad_an_der_fh



Danke Dir für den spritnf-Befehl,

habe mit Online-Unterstützung das Problem ausgemacht.

in konstruktor der Klasse wo Variable benutzt

C++:
Init_App* m_init_app;



dann verdeckt diese lokale Variable die gleichnamige Instanzvariable. Die lokale Variable wird zerstört, sobald der Konstruktor beendet ist, die Instanzvariable bleibt uninitialisiert.
Lass die Zeile einfach weg, oder noch besser, verwende eine Initialisierungsliste, dann kann dir das nicht mehr passieren:



C++:
DeineKlasse::DeineKlasse() : m_init_app(new Init_App)
{
    // ...
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: