adresse zurueckgeben



  • hallo,

    ich hab eine funktion, die mir eine adresse auf ein char-arrray zurueckgibt.

    const char * rgb_tool (int r, int g, int b);
    

    beim kompilieren bekomme ich hierfuer eine warnung:

    warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben

    bin ein bisschen verunsichert, ob das jetzt korrekt programmiert ist?
    kann mir jemand den grund fuer die warnung sagen, evtl. hiweis auf eine fehlerquelle?



  • Das Problem liegt darin, dass der Speicherplatz für die lokale Variable nach der Beendigung der Funktion wieder freigegeben wird. Der Zeiger, den du zurückgibst zeigt aber genau auf diesen Speicherplatz, d. h. dass auf einmal auf dem Speicherplatz was ganz anderes stehen kann. Sowas kann auch zu unerwarteten Abstürzen führen.

    Wenn man sowas wie du vorhat, dann übergibt man entweder gleich einen Zeiger:

    char * rgb_tool (char *dest, int r, int g, int b);
    

    Oder man schreibt vor die lokale Variable ein static (z. B.: static char rueck[100]; ). Somit bleibt der Speicherplatz reserviert.


Anmelden zum Antworten