ich schon wieder mit ner c++ frage... ich hab mein kleines feines programm... das ganze is ein math. alg.
man stelle sich ein rechteck vor, in dem ein punkt mit best. eigenschaften liegt ich versuche den punkt mittels einschließung zu finden... also zerteile ich das rechteck in 4 unterrechtecke usw...
der rödelt das ganze gut durch, bis er auf einmal "Segmentation fault" liefert...
nun die frage: WAS ZUM GEIER IS DAS?"
das komische is halt, dass der ploötzlich und mittendrin aufhört... durch schrittweise ausgaben auf dem bildschirm, weiß ich ungefähr, wo der hängt...
CODE
double allesdoof(double* ai, int A, int B, int n, double N, int k){ cinterval pz,pA, pB; cout << "hallo" << endl; cout << "N: " << N << endl; cout << "n: " << n << endl; cout << "k: " << k << endl; cout << "ai: " << ai[0] << endl; cout << "A: " << A << endl; cout << "B: " << B << endl;
und ausgegeben wird:
hallo Segmentation fault
davor kommt der ohne probleme durch diese stelle...
Also. Wie schon angesprochen wurde. Buch hilft. Und segfault ist nix "spezielles". Du greifst auf Speicherbereiche zu, in denen du nichts zu suchen hast. Durch deine Iteration - wie auch immer die aussieht, werden sicher irgendwelche Pointer oder Zählvariablen verändert. Entweder greift irgendwann dein Pointer in geschütze Bereiche oder eine deiner Zählvariablen wird über ihre Obergrenze hinaus erhöht. Leider hast du ja nur eine nichtssagende Dummyfunktion gepostet. Da fliegt vll. der Fehler aber die Ursache liegt anderswo.
Für Programmierfragen wende dich doch mal an die Kompetenzen im HnH
kann es sein, dass es sich dabei um ein mac-problem handelt? hab bei ein bissl googlen festgestellt, dass es ziemlich viele mac-user mit diesem problem gibt...
kennt sich da jemadn aus, um das zu beheben??? danke m.
ps: ich greif definitiv auf keine resource zu, die nicht auch richtig ist...
ich lass mir doch vor dem funk-aufruf alle variablen die da reinkommen ausgeben... und als erstes nach den funk-start auch nochmal und da kommt der fehler... das is ja das komische...
es kann sein, dass er speicherprobleme hat, aber was kann ich dagegen machen... ich programmier meiner meinung nach sehr sauber... und da kommt so ein mist völlig ungelegen...
es kann sein, dass er speicherprobleme hat, aber was kann ich dagegen machen... ich programmier meiner meinung nach sehr sauber... und da kommt so ein mist völlig ungelegen...
Was kann man bloss dagegen machen? Erstmal versuchen mit diesem Programm - wie nennen es doch alle? - Debugger klar zu kommen. Und wenn du das verstanden hast, dann kannst du damit beginnen das Problem einzukreisen. Und wenn du dann genau weißt was das Problem ist, kannst du hier nocheinmal fragen, was man dagegen tun kann.
Was kann man bloss dagegen machen? Erstmal versuchen mit diesem Programm - wie nennen es doch alle? - Debugger klar zu kommen. Und wenn du das verstanden hast, dann kannst du damit beginnen das Problem einzukreisen. Und wenn du dann genau weißt was das Problem ist, kannst du hier nocheinmal fragen, was man dagegen tun kann.
also ich habs mir mal ein bissl mit m debugger angeschaut... und der läuft genau bis dahin sauber durch und verliert einfach durch den funk-aufruf die werte...
das ganze passiert mehrmals, weil rekursiv... also greife ich die ganze zeit auf die werte zu und auf einmal will er nicht mehr...
mir scheint, dass es ein mac-problem is... vielleicht mach ich das ganze nächste woche mal auf nem linux ding... ma guggen...
aber vielleicht hat ja ein apfel-mensch nen hinweis...
ich wette, dass ich da nur am anfang eine befehlszeile einfügen muss, damit dieses mac-problem unterbunden wird...
also ich habs mir mal ein bissl mit m debugger angeschaut... und der läuft genau bis dahin sauber durch und verliert einfach durch den funk-aufruf die werte...
das ganze passiert mehrmals, weil rekursiv... also greife ich die ganze zeit auf die werte zu und auf einmal will er nicht mehr...
mir scheint, dass es ein mac-problem is... vielleicht mach ich das ganze nächste woche mal auf nem linux ding... ma guggen...
aber vielleicht hat ja ein apfel-mensch nen hinweis...
ich wette, dass ich da nur am anfang eine befehlszeile einfügen muss, damit dieses mac-problem unterbunden wird...
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