_
toggle menu eXmatrikulationsamt.de
online: 704 gäste

C++ Segmentation fault

was zum geier...
Themen Layout: [Standard] · Linear · Outline Thema abonnieren | Thema versenden | Thema drucken
post 17 Apr 2008, 18:38
avatar
4. Schein
****

Punkte: 470
seit: 01.10.2003

Zitat(aktsizr @ 17 Apr 2008, 17:04)
...das ist ganz sicher kein mac Problem.
*

ok... dann lasst es mich anders ausdrücken:
CODE


int do_something(int a, int b, int* c){
   cout << "a1" << a << endl;
   cout << "b1" << b << endl;
   a=a+b;
   b=2*b;
   cout << "a2" << a << endl;
   cout << "b2" << b << endl;
   do_something(a,b,c);
   }

das macht der super ein paar mal...
aber nach dem x-ten mal, bringt der die fehlermeldung...
da steht dann quasi (z.B.):
a1 100
b1 1000
a2 1100
b2 2000
Segmention fault... blabla...
sprich, der geht wieder in die funk rein, aber stirbt dort ab...
mit dem array (wo ein fehlzugriff stattfinden könnte, passiert gar nix!!!)

ich hab echt keine ahnung, wo da der fehler liegen sollte...

Dieser Beitrag wurde von marco: 17 Apr 2008, 18:38 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 18:51
avatar
Straight Esh
*********

Punkte: 14030
seit: 01.10.2003

Speicherüberlauf? Wie groß ist denn das x?

Befrage doch mal strace oder valgrind um einen Trace des Problems zu bekommen ...


--------------------


bonum agere et bonum edere,
sol delectans et matrona delectans

(Verlängere dein Leben indem du hier und hier und hier und hier klickst!)
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 19:03
avatar
tangel
*******

Punkte: 1038
seit: 18.01.2005

Könnte sein, daß du durch die Rekursion an die Begrenzung der Stack Größe stößt. Frag' mich jetzt nicht, wie man das genau auf OS X herausbekommt.

/edit: gibt es auch irgendeine Abbruchbedingung in dem Codesnipplet? Ich sehe keine...

Dieser Beitrag wurde von tingel: 17 Apr 2008, 19:04 bearbeitet


--------------------
bild kann nicht angezeigt werden
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 19:21
avatar
4. Schein
****

Punkte: 470
seit: 01.10.2003

Zitat(tingel @ 17 Apr 2008, 19:03)
Könnte sein, daß du durch die Rekursion an die Begrenzung der
Stack Größe stößt. Frag' mich jetzt nicht,
wie man das genau auf OS X herausbekommt.

/edit: gibt es auch irgendeine Abbruchbedingung in dem Codesnipplet? Ich sehe keine...
*



das klingt, als könnte es mein problem sein... wußte gar ni, dass es sowas heutzutage noch gibt...
mist...

da schau ich mal...

wie würde ich es unter linux lösen???

ps: natürlich gibt es ne abbruch-ding... hab ich der einfachhet weggelassen...

einfach wenn a>1mio, dann return (z.B.)

Dieser Beitrag wurde von marco: 17 Apr 2008, 19:22 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 19:27
avatar
d00fk0pp
*****

Punkte: 710
seit: 09.05.2005

Zitat(marco @ 17 Apr 2008, 19:21)
d

ps: natürlich gibt es ne abbruch-ding... hab ich der einfachhet weggelassen...

einfach wenn a>1mio, dann return (z.B.)
*


int a hat aber nur 32.000 ???
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 19:36
avatar
tangel
*******

Punkte: 1038
seit: 18.01.2005

Wenn die Variablen, die du rekursiv übergibst, nach dem Aufruf nicht mehr gebraucht werden, könntest du die global machen, anstelle die als Argument zu übergeben. Das ist natürlich nicht schön, aber reduziert die Menge der Daten, die der Aufruf auf den Stack legt.
Wenn das möglich wäre, stellt sich natürlich die Frage, ob man die Rekursion nicht gleich durch eine Schleife ersetzen kann...

Dieser Beitrag wurde von tingel: 17 Apr 2008, 19:37 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 17 Apr 2008, 19:50
avatar
No-Know-How
*****

Punkte: 631
seit: 27.04.2007

Zitat(CoolSun @ 17 Apr 2008, 19:27)
int a hat aber nur 32.000 ???

"Kommt drauf an", sowohl C als auch C++ Standard schreiben nur minimale Breiten vor (16 oder 32 Bit derzeit, blame my memory).
Zitat(tingel @ 17 Apr 2008, 19:36)
Wenn das möglich wäre, stellt sich natürlich die Frage, ob man die Rekursion nicht gleich durch eine Schleife ersetzen kann...

Full ack.
Schneller, platzsparender, ...


--------------------
Studentenclub Count Down
The future is already here - it is just unevenly distributed. William Gibson
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: