我(尝试?)返回在函数内部分配的内存。
假设我在这里写的(并且没有测试)没有明显的问题,内存是如何释放或不释放的?我需要free(bob)
稍后,因为他在堆上而不是在堆栈上,对吧?
我刚才在另一个接受的答案中读到了一些关于 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???
}