我(尝试?)返回分配给函数内部的内存。在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