gcc (GCC) 4.6.3
c89
apache runtime portable libraries
Hallo,erklären Speicher malloc
Nur eine einfache Frage, die ich denke, ich versuche, einen UUID-Wert zu schaffen.
Ich möchte mich Funktion, die es erstellt, um allein zu sein (Black Box), so kann ich einfach einen Puffer übergeben und die Funktion wird den Rest tun.
Das bedeutet, ich muss Speicher auf dem Heap in dieser Funktion deklarieren, da die aufrufende Funktion nicht viel zu deklarieren weiß. Ich weiß, dass das eine schlechte Idee ist, da der Callie den Speicher freigeben muss, nachdem er damit fertig ist.
Gibt es eine Möglichkeit, dass ich das besser machen kann?
Wenn ich dies ausführe, ist die branch_id_buf immer Null, nachdem die Funktion zurückgibt. Ich habe es jedoch an die Funktion übergeben, so dass es nicht null sein sollte, wenn die Funktion zurückkehrt, da sie auf einen zugewiesenen Speicher verweisen sollte.
Vielen Dank für jede Beratung,
static void g_get_branch_id(char *branch_id_buf);
int main(void)
{
char *branch_id_buf = NULL;
g_get_branch_id(branch_id_buf);
printf("branch id [ %s ]\n", branch_id_buf);
free(branch_id_buf);
return 0;
}
static void g_get_branch_id(char *branch_id_buf)
{
apr_uuid_t uuid;
#define MAGIC_COOKIE_LENGTH 9
const char *MAGIC_COOKIE = "z9hG4bk-";
const int BRANCH_ID_LENGTH = APR_UUID_FORMATTED_LENGTH + MAGIC_COOKIE_LENGTH;
branch_id_buf = malloc(BRANCH_ID_LENGTH);
if(branch_id_buf == NULL) {
return;
}
strncpy(branch_id_buf, MAGIC_COOKIE, BRANCH_ID_LENGTH);
printf("branch id [ %s ]\n", branch_id_buf);
apr_uuid_get(&uuid);
#define PREFIX_BRANCH_LENGTH 8
apr_uuid_format(branch_id_buf + PREFIX_BRANCH_LENGTH, &uuid);
printf("branch id [ %s ]\n", branch_id_buf);
}
malloc gibt NULL zurück, wenn Speicher nicht zugewiesen werden konnte. Sind Sie sicher, dass Ihnen beim Ausführen dieses Programms nicht die Ressourcen ausgehen? – fduff
Was passiert, wenn Sie einen Schritt in g_get_branch_id() ausführen? – fduff