【发布时间】:2010-04-18 10:37:51
【问题描述】:
我正在编写一些糟糕的、糟糕的代码,我需要一种将 free() 放在语句中间的方法。实际代码是:
int main(){
return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin))?"Yes!\n":"No!\n") >= 0;
// leak 1000 bytes of memory
}
我正在使用 alloca(),但我不能确定它是否真的可以在我的目标计算机上工作。我的问题是免费返回无效,所以我的代码有这个错误信息:
error: void value not ignored as it ought to be
我的明显想法是:
int myfree(char *p){
free(p);
return 0;
}
这很好,因为它使代码更加难以阅读,但我不想添加另一个函数。
我还曾短暂尝试将free() 视为函数指针,但我不知道这是否可行,而且我对 C 的了解还不够,无法正确完成。
注意:我知道这是一个糟糕的主意。不要在家里尝试这个孩子。
编辑:非常感谢大家,我通过将我的单行 isPalindrome() 函数更改为:
return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);
(调用正在跟踪递归深度)
没有更多的内存泄漏!
【问题讨论】:
-
对不起。你有什么问题!?
-
添加另一个函数调用到底有什么问题?如果这是解决问题的最明显方法,而且有效,为什么不呢?
-
你是对的,这是一个糟糕的主意,为什么要这样做?为什么不在堆栈上使用 char 数组?
-
我想这取决于人们是否认为对自己的代码施加愚蠢的限制是否合法。 “玩”,我相信这是心理学家所说的 ;-)