【发布时间】:2013-10-20 15:53:33
【问题描述】:
这似乎运行没有任何问题,但我在想,当它返回时,buff 可能会自动被释放,这反过来又会释放 *string 并在下次引起问题我分配并且该内存被覆盖(或更糟,等等)。我不想通过反复试验进行测试,因为到目前为止我的测试可能很幸运。我做错了吗?
void strCat1000(char *concatDest, char *format, ...)
{
char buff[1000];
va_list arg_ptr;
va_start(arg_ptr, format);
vsnprintf(buff, sizeof(buff), format, arg_ptr);
va_end(arg_ptr);
free(concatDest);
concatDest=buff;
}
更简洁的说,concatDest 是指向这个函数返回后释放的内存吗?
【问题讨论】:
-
创造者应该是毁灭者。考虑
concatDest是否在堆栈上?! -
哎呀 - 听起来有点宗教 - 并不意味着它是那样的
-
这段代码应该做什么?
-
它应该连接几个字符串并将它们放在concatDest中。我想这样做,所以如果我想将结果存储在我正在连接的字符串之一中,它仍然可以工作。
-
总之...这个函数是个灾难,最好将它声明为
char* strCat1000(char *format, ...),并且不要在里面做任何释放。