Dynamische Speicherverwaltung für zweidimensionales Array



  • int** p2DimArr = new int*[FirstDim];

    Schade, new ist nicht deklariert. Was muss ich machen, damit das läuft?



  • µngbd schrieb:

    int** p2DimArr = new int*[FirstDim];

    Schade, new ist nicht deklariert. Was muss ich machen, damit das läuft?

    einen vernünftigen compiler benutzen, der das kann 😃



  • µngbd schrieb:

    int** p2DimArr = new int*[FirstDim];

    Schade, new ist nicht deklariert. Was muss ich machen, damit das läuft?

    new gibt es nur in C++. Hier bist Du im C-Forum. Also hier gibt es kein new. Willst Du mit Gewalt new nehmen, mußt Du eigentlich damit ins C++-Forum gehen. Aber Du könntest das, was man mit new macht, auch mit malloc machen. Daher die Frage: new oder malloc, was ist Dein Begehr?



  • Habe gerade hier (http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html) noch eine super Lösung gefunden:

    Die ist aber grundlegend anders als die von _matze, nicht nur syntaktisch. Da hast du nicht einen Block, sondern mehrere, die mit Zeigern verbunden sind. Zwei Zeilen zu vertauschen geht somit schneller. Die Entscheidung zwischen den beiden sollte die Datenstruktur und nicht die Syntax zum Thema haben.



  • Also wenn ich diese Methode, die 'new' verwendet benutze, lässt sich das in meiner .c-Datei problemlos mit gcc compilieren 😕



  • vernuenftig0r schrieb:

    µngbd schrieb:

    int** p2DimArr = new int*[FirstDim];

    Schade, new ist nicht deklariert. Was muss ich machen, damit das läuft?

    einen vernünftigen compiler benutzen, der das kann

    aber der würde wiederum keine pointer kennen.
    🙂



  • Siegfried1 schrieb:

    Also wenn ich diese Methode, die 'new' verwendet benutze, lässt sich das in meiner .c-Datei problemlos mit gcc compilieren 😕

    Nein! new und delete sind Schlüsselwörter der Sprache C++. Wenn du C programmieren willst, musst die entsprechenden Äquivalente malloc und free benutzen (außerdem gibt's noch calloc und realloc, aber das nur am Rande).

    Also nochmal ganz klar: du kannst keine reinen C++-Sprachmittel in C benutzen! Nicht möglich (wird dir der Compiler auch sagen)! Es ist einfacher, Autoräder am Motorrad zu befestigen...



  • Basher schrieb:

    vernuenftig0r schrieb:

    µngbd schrieb:

    int** p2DimArr = new int*[FirstDim];

    Schade, new ist nicht deklariert. Was muss ich machen, damit das läuft?

    einen vernünftigen compiler benutzen, der das kann

    aber der würde wiederum keine pointer kennen.
    🙂

    Hmm Also mein C++-Compiler kennt pointer? 😃



  • rüdiger schrieb:

    Ist ja aber nicht dynamisch 😉

    Doch in C99 gibt es (leider) dynamische Arrays.

    Wieso "leider"?



  • Tim schrieb:

    rüdiger schrieb:

    Ist ja aber nicht dynamisch 😉

    Doch in C99 gibt es (leider) dynamische Arrays.

    Wieso "leider"?

    Ich finde VLAs sind ein unausgewogenes Feature. Es gibt keinen Weg für die Anwendung festzustellen, ob die Stackgrenzen gesprengt werden. Bei man: alloca gibt es ja immerhin noch den Weg, dass die Funktion das intern prüft und fehlschlägt (wobei zB die GCC/glib alloca Funktion leider noch nicht einmal das tut). Aber wie soll man in der Runtime bei einem VLA auf so ein Problem reagieren? (gar nicht? Programm abbrechen? Stack wieder herstellen? ...)



  • rüdiger schrieb:

    Tim schrieb:

    rüdiger schrieb:

    Ist ja aber nicht dynamisch

    Doch in C99 gibt es (leider) dynamische Arrays.

    Wieso "leider"?

    Ich finde VLAs sind ein unausgewogenes Feature. Es gibt keinen Weg für die Anwendung festzustellen, ob die Stackgrenzen gesprengt werden. Bei man: alloca gibt es ja immerhin noch den Weg, dass die Funktion das intern prüft und fehlschlägt (wobei zB die GCC/glib alloca Funktion leider noch nicht einmal das tut). Aber wie soll man in der Runtime bei einem VLA auf so ein Problem reagieren? (gar nicht? Programm abbrechen? Stack wieder herstellen? ...)

    das ist wie mit rekursionen. du musst vorher wissen, wie viel es maximal werden kann.
    🙂


Anmelden zum Antworten