我(嘗試?)返回分配給函數內部的內存。在C函數中引用計數和在函數內部分配內存
假設我在這裏寫的東西沒有明顯的問題(並沒有測試)內存是如何釋放或不釋放的?之後我需要free(bob)
,因爲他不在堆上,對吧?
我在another accepted answer just now的C中讀了一些關於引用計數的內容,但我真的不記得C有什麼像垃圾回收器。
char* strCat5000(char *fmt, ...)
{
char buff[5000];
char *ret_;
va_list arg_ptr;
va_start(arg_ptr, fmt);
vsnprintf(buff, sizeof(buff), fmt, arg_ptr);
va_end(arg_ptr);
//ret_ = malloc((char*)(strlen(buff)+1)*sizeof(char)); //Allocated inside function
ret_ = (char*)malloc((strlen(buff)+1)*sizeof(char)); //moved (char*) .. typo
ret_ = strcpy(ret_,buff);
return (ret_);
}
...
void findBob()
{
char * bob;
bob = strCat1000("Server is %s for %d seconds.", "on fire", 35329);
printf("%s", bob);
free(bob); //bob needs to be freed here or he'll leak when findBob ends???
}
引用計數與垃圾回收沒有關係。這是一種用於管理內存的模式,但它仍然是程序員的手動操作POV –
你是對的,C沒有垃圾收集器。你的代碼有問題嗎? – Barmar
@EdS .:不一定。 Python使用引用計數,它對程序員是透明的。 – icktoofay