Announcement

Collapse
No announcement yet.

Segmentation faults bei String-Operationen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Segmentation faults bei String-Operationen

    Hallo Leute,

    heute komme ich mal mit einem sehr speziellen Problem ins Forum:

    Meine Software stürzt regelmäßig nach etwa 4-5 Stunden Dauerbetrieb mit Segmentation Faults an Speicheranforderungen bei String-Operationen (Standard C++ Library Klasse string) ab. Meist ist dies bei einem append der Fall oder wenn aus einem stringstream per .str() ein string ausgelesen werden soll. (sagt zumindest der Debugger, der dann an der Stelle stehen bleibt)

    Laut free ist beim Absturz noch genug Speicher vorhanden, es ist also kein verkapptes "Out of memory". (So lange der Debugger den Prozess noch hält, ist der Speicher ja noch nicht freigegeben, oder?).

    Ich nutze den gcc 4.5.1 für SUSE Linux, (nur zur Info, falls die Implementierung der String-Klasse relevant ist, was ich allerdings bezweifele. Warum sollte die String Klasse gerade bei mir solche Probleme machen?)

    Die Frage ist nun, wie debuggt man so einen Fehler? Ich hab schon mal ein Tool zur statischen Code-Analyse drübergejagt (Klocwork), der mir hier aber auch keine Hilfe geben kann. Ich kann auch nicht tiefer debuggen als mein append-Aufruf, um da Dinge nachzusehen, z.B. ob der String, an den angehängt werden soll, selbst schon irgendwie korrumpiert ist. Ich bin da ratlos und wollte daher mal nachfragen, ob mir jemand dabei helfen kann, wie ich an die Sache rangehen soll.

    Gruß
    Martin

  • #2
    Ich würde da eher auf einen nicht initialisierten Zeiger oa. tippen. Schließlich bedeutet es, dass auf einen Zugriff auf einen nicht gültigen Speicherbereich
    Christian

    Comment


    • #3
      Hi Christian,

      Prinzipiell gebe ich Dir für die Ursache des Segmentation faults ja recht, aber der Segmentation fault tritt (laut Debugger) bei einer Speicheranforderung per new auf, also dann wenn ein neuer Speicherbereich angefordert wird, nicht wenn ein existierender Zeiger gelesen wird. Gerade das ist es ja, was mich so ratlos macht.

      Und solche Sachen wie nicht initialisierte Pointer müssten doch als allererstes von Klocwork anmeckert werden, oder ?

      Comment


      • #4
        http://www.cplusplus.com/forum/general/6162/

        http://www.c-plusplus.de/forum/73109

        solche Hinweise ...gibt noch mehr ... schon gesichtet
        Christian

        Comment

        Working...
        X