Okay, also ich habe eine Methode, die ich anrufe. Die aufgerufene Methode gibt eine char*
zurück, die innerhalb der aufgerufenen Methode zugewiesen wird. Nachdem ich die zurückgegebene char*
einer neuen char*
zugewiesen habe, möchte ich diese nach der Benutzung freigeben. Aber Xcode beschwert sich und gibt einen Fehler aus. Es besagt, dass das Objekt, das ich freizugeben versuche, nicht zugewiesen wird, was ich nicht bekomme, da ich sicher bin, dass ich es zuteile.c: Freigeben eines mallocated Objekt Fehler
Hier ist mein Code:
void print_r()
{
char *stateA = isActive(ruter_array[id]->flagg);
//print out the results etc
free(stateA); <-----The program crashes here.
}
char * isActive(unsigned char a_flag)
{
char *ret = malloc(5);
if((a_flag & 1) == 1)
{
//is active
ret = "yes";
return ret;
}
ret = "no";
return ret;
}
Es ist nicht wichtig, zu verstehen, was das bedeutet, aber warum diese befreiende abstürzt?
'isActive' gibt einen Zeiger auf die String-Konstante" yes "oder die String-Konstante" no "zurück, die keine mallocated-Objekte sind, weil sie etwas anderes sind (String-Konstanten). Es mallocates außerdem ein Objekt und gibt einen Zeiger auf dem Objekt nicht zurück. (Auch "mallocate" ist kein gebräuchlicher Begriff, aber es funktioniert) – immibis