関数内に割り当てられたメモリを返そうとしています。
私がここに書いた (そしてテストしなかった) ものに明らかな問題がないと仮定すると、メモリはどのように解放され、解放されないのでしょうか? 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???
}