我正在编写一些可怕的,可怕的代码,我需要一种方法将free()置于语句中间.实际代码是:
int main(){
return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin))?"Yes!\n":"No!\n") >= 0;
// leak 1000 bytes of memory
}
Run Code Online (Sandbox Code Playgroud)
我正在使用alloca(),但我无法确定它是否真的可以在我的目标计算机上运行.我的问题是免费返回无效,所以我的代码有这个错误消息:
error: void value not ignored as it ought to be
Run Code Online (Sandbox Code Playgroud)
我有一个明显的想法是:
int myfree(char *p){
free(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这很好,因为它使代码更难以阅读,但我不想添加其他功能.
我也简单地尝试过将其free()视为一个函数指针,但我不知道这是否会起作用,而且我对C的理解还不够.
注意:我知道这是一个糟糕的主意.不要在家里尝试这个孩子.
编辑:非常感谢,我通过将我的单行isPalindrome()函数更改为:
return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);
Run Code Online (Sandbox Code Playgroud)
(调用跟踪递归深度)
没有更多的内存泄漏!
CB *_*ley 10
我不知道你要去哪里,但是如果你需要一个表达式将指针释放p为副作用并且评估为0,那么你可以使用它.
(free(p), 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |