【发布时间】:2023-03-11 13:34:01
【问题描述】:
我是 C 的初学者。下面是我的场景 - 我在 main 函数中创建了一个指针变量,它已被传递给多个函数(在此示例中为 2 个级别)。其中一项功能可以释放它。现在我需要检查 Main 以查看指针是否被释放,这意味着我需要将 main() 中的 &str 的值设置为指向 NULL。不确定我的方法是否正确。任何帮助将不胜感激
void func2(char *str)
{
free(str);
}
void func1(char *str)
{
func2(str);
}
int main()
{
char *str;
str=(char *) malloc(10);
func1(str);
if(str){ do something; } // if condition to check whether str is freed
}
【问题讨论】:
-
您无法进行检查。这就是使手动内存管理变得困难的原因。
-
当然有……而且一旦你了解了如何使用指针,就很简单了。
-
您可以通过一些更改来做到这一点(不知道为什么@milleniumbug 另有说明),但您真的想要吗?总的来说,这是一个糟糕的设计。 C 中的内存管理主要围绕所有权展开。尽量清楚谁拥有什么内存,这样你遇到的问题就会少得多。
-
顺便说一句,Don't cast malloc
-
@EdS。好的,显然我还没有阅读上下文 - 问题标题询问“如何检查指针是否已被释放?”我的评论在这里是准确的(好吧,你不能那样做),剩下的问题(没有代码)提出了一个不同的问题“如何在函数之外将指针标记为 NULL?”