gpt4 book ai didi

c - 将 void 函数视为一个值

转载 作者:行者123 更新时间:2023-12-02 05:35:31 25 4
gpt4 key购买 nike

我正在编写一些非常糟糕的代码,我需要一种方法将 free() 放在语句中间。实际代码是:

int main(){
return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin))?"Yes!\n":"No!\n") >= 0;
// leak 1000 bytes of memory
}

我使用的是 alloca(),但我不确定它是否真的能在我的目标计算机上运行。我的问题是 free 返回 void,所以我的代码有这个错误信息:

error: void value not ignored as it ought to be

我的明显想法是:

int myfree(char *p){
free(p);
return 0;
}

这很好,因为它使代码更难读,但我不想添加其他函数。

我也曾短暂地尝试过将 free() 视为函数指针,但我不知道这是否行得通,而且我对 C 的了解还不够多,无法正确地做到这一点。

注意:我知道这是个糟糕的主意。不要在家里的 child 尝试这个。

编辑:非常感谢大家,我通过将我的单行 isPalindrome() 函数更改为此来让它工作:

return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);

(调用跟踪递归深度)

不再有内存泄漏!

最佳答案

我不太清楚你要把它塞进什么地方,但如果你需要一个释放指针 p 的表达式作为副作用并将其计算为 0,那么你可以使用它.

(free(p), 0)

关于c - 将 void 函数视为一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2661924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com