Abort bei delete[]



  • hi
    ich versuche grad als uebung das programm "wc" nachzuschreiben und aus irgendeinem grund, bekomme ich beim loeschen eines strings (char 😉 per delete[] immer einen abort.

    der code liegt hier
    http://rafb.net/p/VBaRis70.html

    das ganze ist sehr suboptimal, ich versuche das mit vim zu schreiben und wir sollen sehr grundlegend arbeiten, also ohne libs etc.

    wie auch immer, auf jedenfall bekomme ich immer bei zeile 58 einen abort. ich sehe den fehler aber einfach nicht. bin den inhalt des speichers schon schritt fuer schritt durchgegangen, aber die betreffende variable enthaelt korrekt den string mit '\0' byte.

    vielleicht kann mir ja jemand helfen?

    hier mal zeile 53 - 64, hilft wahrscheinlich nicht, aber so koennte man den fehler vielleicht sogar sofort sehen 🙂

    void deleteList(node **first)
    {
            node *curNode = *first;
    
            while (curNode) {
                    delete[] curNode->str; // verursacht abort ****************************************************
                    node *temp = curNode->next;
                    delete curNode;
                    curNode = temp;
            }
    
            *first = 0;
    }
    

    danke im voraus 🙂


  • Administrator

    Der Code ist eigentlich C, von C++ sieht man nur die Ein-/Ausgabe. Wieso verwendest du nicht eine Klasse für deine Liste? Objekt orientiertes Programmieren, schon mal davon gehört? 🙂

    Zu deinem Fehler:
    Du gibst Speicher frei, welchen du gar nie angefordert hast. Ich konnte nirgends ein new char[...] finden. Also willst du Speicher freigegeben, welcher dir gar nicht gehört.
    Aber das Problem kommt schon nur daher, dass du eben nicht in C++ sondern in C programmierst. In C++ hat man für die Strings eine entsprechende Klasse: std::string .

    Also ganz grundsätzlich, solltest du vielleicht mal die Grundlagen von C++ lernen oder sie nochmals wiederholen.

    Grüssli



  • hi
    danke f[r die antwort.
    wie gesagt, soll das ganze super simpel sein und keine weiteren sachen benutzt werden. normal schreibe ich auch in klassen etc, aber das ganze hier sollte nur ne uebung fuer systemnahe programmierung sein, d.h. keine string klasse, sondern direkt char *.

    sollen wir einfach koennen. praktisch macht es natuerlich nicht uebertrieben viel sinn 🙂

    hast recht, hatte tatsaechlich vergessen den string zu kopieren... (haette ich vielleicht auch gleich weglassen koennen und direkt auf den parametern arbeiten).

    danke


  • Administrator

    thoniel schrieb:

    wie gesagt, soll das ganze super simpel sein und keine weiteren sachen benutzt werden. normal schreibe ich auch in klassen etc, aber das ganze hier sollte nur ne uebung fuer systemnahe programmierung sein, d.h. keine string klasse, sondern direkt char *.

    sollen wir einfach koennen. praktisch macht es natuerlich nicht uebertrieben viel sinn 🙂

    Ehm, aber ihr werdet ja wohl die C++ Klassen und die C++ Standardbibliothek benutzen dürfen? Sonst macht das ja überhaupt gar keinen Sinn und ihr könntet ja gleich in C programmieren!
    Wer vergibt denn in C++ solche Aufgabe?

    Grüssli


Anmelden zum Antworten