Array von Zeigern auf struct dynamisch anlegen



  • Ich steh gerade total auf dem Schlauch ... benötige ein Array von Zeigern auf eine struct und das ganze dynamisch, da die Anzahl der benötigten Zeiger erst zur Laufzeit feststeht.

    Hier im Code an Stelle der struct mal ints genommen als Beispiel.

    int *func(void)
    {
       int **pi;
       int *i = NULL;
       int *ret;
       int anzahl = 3;
    
       pi = (int **) malloc(sizeof(int) * anzahl);
    
       pi[0] = i;
    
       ret = pi[0];
       free(pi);
    
       return ret;
    }
    

    Hier bekomme ich beim free() aber einen Programmabsturz.
    Was mache ich falsch?


  • Mod

    Bitte vollständigen Code, wenn es um Abstürze geht. Siehe:
    http://www.c-plusplus.net/forum/304133

    Hier ist verdächtig/falsch:

    • sizeof(int) != sizeof(int*)
    • Den Cast brauchst du nicht, das ist C++ (wobei man das in C++ nie so machen würde. Aber wenn man es so machen würde, bräuchte man den Cast. Den man dann wiederum auch anders machen würde. Kurz: C++ ist anders 🙂 ). Wenn ohne Cast Compilerfehler gibt, benutzt du einen C++-Compiler. Tu das nicht.
    • Das ret, was du zurück gibt, existiert nach dem free nicht mehr.

Anmelden zum Antworten