C-Programm zu schnell?



  • Hi

    ich habe folgendes Problem und wollte fragen ob jemand die Ursache kennt:

    Wenn ich mein c-Programm ausführe kriege ich einen Segmentation Fault. Wo genau der austritt konnte ich noch nicht herausfinden, denn:

    Sobald ich etwas anders mache (z.B das Programm schrittweise mit GDB ausführe oder mir den Index ausgeben lasse läuft das Programm wie geschmiert). Kann das daran liegen, dass das Programm ohne Einflüsse "zu schnell" durchläuft und es deswegen einen Speicherfehler gibt?

    Danke im Vorraus,

    Holgrich

    edit: warum wird "v o r r a u s" zensiert? 😃

    edit: "voraus" -> stimmt 🙂



  • ^^sowas kann sein. wenn das programm nicht zu gross ist, dann poste es doch hier.
    🙂



  • Geht leider aus Datenschutzgründen nicht, ist auf Arbeit programmiert.
    Muss auf eure theoretischen Kenntnisee vertrauen 😉



  • Vorraus wird zensiert, weil's nicht im Duden steht.

    Dass das Ding wirklich zu schnell ist, kann natürlich sein (das müsstest aber schon du wissen). Ich tippe doch eher auf einen ziellosen (lies: zufälligen) Zeiger.



  • Ich wusste ja nichts, dass ein Programm zu schnell sein kann...wie kann denn das kommen? Eigentlich laufen doch keine Prozesse parallel oder ähnliches...

    Und bei einem "zufälligen" Zeiger wäre es doch so, dass es mal funzt und mal nicht...aber z. Zt. ist es ja so, dass es normalerweise nicht funktioniert und sobald man was modifiziert das die Geschindigkeit bremst immer.



  • ^^bau ein paar debug-ausgaben (printfs an markanten stellen, etc) ein. das hilft manchmal, den fehler einzukreisen.
    🙂



  • Ich wusste ja nichts, dass ein Programm zu schnell sein kann...wie kann denn das kommen?

    Das ist auch ungefähr so wahrscheinlich, wie dass ein Programm von den Mondphasen abhängt. Aber natürlich möglich, wenn die Randbedingungen entsprechend sind. Darfst du uns wenigstens sagen, was das Ding ungefähr tut?

    Und bei einem "zufälligen" Zeiger wäre es doch so, dass es mal funzt und mal nicht...

    Oder auf dieser Maschine, aber auf jener nicht.
    Oder auf der südlichen Halbkugel, aber auf der nördlichen nicht.
    Oder im Debugger, aber ohne ihn nicht.

    Mach deine Debugging-Ausgaben und vergiss nicht, dass stdout/stderr gepuffert ist.



  • Holgrich schrieb:

    Sobald ich etwas anders mache (z.B das Programm schrittweise mit GDB ausführe oder mir den Index ausgeben lasse läuft das Programm wie geschmiert). Kann das daran liegen, dass das Programm ohne Einflüsse "zu schnell" durchläuft und es deswegen einen Speicherfehler gibt?

    Nee, es liegt mit Sicherheit an dem Debug- Code, den die DBG- Session einbaut, dadurch schaut ein Zeiger auf eine zufällig erlaubte Stelle, auf die Du zugreifst.
    Eine der wenigen Möglichkeiten, durch zu schnelle Ausführung zum Tod zu gelangen, haben die TurboPascal- Macher in der Unit CRT gezeigt. Um Soft- Timer usw. zu justieren, haben die in einer Schleife runtergezählt und das Ergebnis zur Division benutzt. Als die PCs so die 233 MHz- Welt verlassen haben, war das Ergebnis Div-by-zero, mit der Folge, daß die Programme nicht mal mehr gestartet sind.
    Aber das ist eine seltene Idiotie und weil die CRT ohne Debug- Code war, hat der Debug- Mode nichts geändert. 🙄
    Such' nach 'nem Pointer, der in die Landschaft guckt, macht mehr Sinn...


Anmelden zum Antworten