Pointer in struct
-
Hallo zusammen,
ich habe ein - wie mir scheint - etwas schräges Problem, aber vielleicht stehe ich auch ein wenig auf dem Schlauch.
In einer Header-Datei definiere ich folgende Struktur:
struct PERSON2 {
int id;
int Voraussetzung;
char* Vorname;
char* Nachname;
int* _Fragen;
};Beim Versuch, in der zugehörigen Klasse eine Instanz zu erzeugen:
PERSON2* test2=new PERSON2;
tritt bei der Ausführung eine Access Violation auf. Warnungen o. ä. beim Kompilieren (Visual Studio 2005) treten keine auf...
Das Interessante: Wenn ich *einen* der letzten beiden Pointer ("Nachname" oder "_Fragen") rausnehme (egal welchen), klappt's.

Hat jemand einen heißen Tipp?
Viele Grüße
niere
-
niere schrieb:
Beim Versuch, in der zugehörigen Klasse eine Instanz zu erzeugen:
in der zugehörigen klasse?
tritt bei der Ausführung eine Access Violation auf. Warnungen o. ä. beim Kompilieren (Visual Studio 2005) treten keine auf...
bei der ausführung? wovon genau?
die glaskugel ist leicht vernebelt und sagt nur: reservierst du auch speicher für Vorname, Nachname und _Fragen?
ich nehme an, das folgendes snipplet bei dir problemlos kompiliert und funktioniert:
struct PERSON2 { int id; int Voraussetzung; char* Vorname; char* Nachname; int* _Fragen; }; int main () { PERSON2* p = new PERSON2; delete p; }ansonsten kann es nur noch sein, dass dein compiler irgendwo den bezeichner _Fragen bereits verwendet. niemals nicht mit underscores eigene namen beginnen lassen.
-
ja du versuchst wohl irgendwo ins Nirvana zu schreiben, wo du gar nicht hindarfst
schonmal gedebuggt? - in welcher Zeile tritt der Fehler den auf (Codeauszug bitte)
Ist überhaupt Speicher für Nachname und _Fragen alloziert, wenn du auf sie zugreifst?
-
Hallo queer_boy,
sag' doch Deiner Glaskugel bitte: Jede andere Antwort hätte mir (im Nachhinein gesehen) mächtigen Respekt eingejagt. Das Problem scheint kurz davor zu liegen.
PERSON2* p = new PERSON2; löst nämlich schon die Exception aus, aber nur, wenn davor meine Datenbank geöffnet wurde... Also werd' ich mal weiter debuggen. Falls ich auf ein konkretes Problem stoßen sollte, probier' ich's nochmal...

Danke trotzdem!
Schönen Abend noch
niere
-
Mewin Vorschlag: Mach's gleich richtig:
struct PERSON2 { int id; int Voraussetzung; string Vorname; string Nachname; int Fragen; }; PERSON2 test2;Dann gibt's auch keine Access violations

Gruß,
Simon2.
-
Oder
struct person_type2 { std::size_t id; int requirement; char* prename; char* name; int* questions; person_type2(const char* _prename, const char* _name) : requirement(0), id(0), questions(NULL) { prename = new char[std::strlen(_prename) + 1]; std::strcpy(prename, _prename); name = new char[std::strlen(_name) + 1]; std::strcpy(name, _name); } ~person_type2() { delete [] prename; delete [] name; } };Kann aber auch ganz böse in die Hose gehen ... wenn man die struct nicht korrekt nutzt!