Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[OT] Zeiger in C++
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1123
Location: St. Wendel

PostPosted: Thu Nov 04, 2004 3:17 pm    Post subject: [OT] Zeiger in C++ Reply with quote

Hallo,

ich habe mal wieder ein Problem.

Ich bin in C++ etwas eingerostet,
will aber mal wieder ein Programm schreiben,
gesagt getan.

Folgendes Problem:

Ich habe ein Klasse(A) in der ein Zeiger auf einen Vector(V1) mit Elementen einer anderen Klasse(B) zeigt.

Diesen Vector erzeuge ich im Konstruktor der Klasse A.

Wenn ich nun aber in einer Methode der Klasse A Ein Element an V1 des Typs B anhängen möchte,
bekomme ich einen Segmentation Fault.
Was wohl daran liegt das der Zeiger nicht mehr auf V1 zeigt.
Nur warum Zeigt der Zeiger nicht mehr auf V1?

Also habe ich eine Klasse Test geschrieben in der ich oben genanntes ausschliesslich ausprobiert habe
und siehe da kein Problem, sollte also gehen.

Jemand eine Idee?

MfG

Py

Den Quelltext der Klassen wollte ich jetzt nicht schicken... sind bereits ein paar Hundert...
Back to top
View user's profile Send private message
reptile
Guru
Guru


Joined: 19 Nov 2002
Posts: 363

PostPosted: Thu Nov 04, 2004 4:37 pm    Post subject: Reply with quote

versuch mal, dem vektor eine gewisse startgrösse zu geben, zum beispiel:
Code:

vector< Type > Type_Vec(15);

bzw.
Code:

vector< Type > *Type_Vec_Ptr = new vector< Type >(15);

(wobei ich mir beim zweiten beispiel nicht sicher bin, dass es syntaktisch so richtig ist.)

ich hab auch probleme mit segfaults bei vektoren, und daher bei absehbaren grössen von vektoren arrays genommen - ich vermute mal, dass da ein fehler in der implementierung von alloc bei gcc zumindest bis 3.3 vorliegt. es klappt für mich nichtmal bei strings.

alternativ kannst du mit
Code:

Type_Vec_Ptr->reserve(Type_Vec_Ptr->capacity() + 5);

auch die kapazität nach dem anhängen eines elements um 5 erhöhen (oder wie viele du auch eben brauchst).
Back to top
View user's profile Send private message
abcd
n00b
n00b


Joined: 27 Oct 2004
Posts: 32

PostPosted: Thu Nov 04, 2004 5:07 pm    Post subject: Reply with quote

Es kann viele Gruende dafuer geben,

- es kann sein, dass du deinen Zeiger im Laufe des Programms verbiegst
- oder, falls du den Speicher dynamisch reservierst, irgendwo zufaellig freigibst (d.h "irgendwas = new irgendwas[10]", und dann irgendwo "delete []irgendwas") und dann mit diesem freigegebenen Speicher weiter arbeitest
- oder, da du den V1 (ich nehme an, als lokale Variable) im Konstruktor anlegst und den Zeiger innerhalb des Konstruktors darauf setzt, versuchst, ausserhalb des Konstruktors darauf zuzugreifen. Alle lokalen Variablen werden auf dem Stackspeicher abgelegt. Wird die Funktion (in diesem Fall der Konstruktor) verlassen, wird auch der entsprechende Stackbereich freigegeben, aber dein Zeiger zeigt immer noch auf diesen freigegebenen Bereich. Das Programm kann normal weiterlaufen, so lange du dort den Speicherinhalt nicht veraenderst... :lol:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum