C++ 将指针作为参数传递并清理
我的代码如下所示:C++ 将指针作为参数传递并清理,c++,windows,pointers,C++,Windows,Pointers,我的代码如下所示: Function() { struct* str = NULL; SomeFunction(&str); //continue using str } SomeFunction(struct** input) { struct* temp = NULL; FillInStruct(&temp); *input = temp; WTSFreeMemory(temp); return; } 所以我
Function()
{
struct* str = NULL;
SomeFunction(&str);
//continue using str
}
SomeFunction(struct** input)
{
struct* temp = NULL;
FillInStruct(&temp);
*input = temp;
WTSFreeMemory(temp);
return;
}
所以我希望在清除temp之后,我的输入指针也会变得无效,在第一个函数中,我应该不能再使用str指针了,因为它已经被清除了。但这并没有发生,我也不知道为什么。我清理了我的临时指针,但是我的输入和str指针仍然指向正确的结构,我能够继续使用这些指针。你知道为什么吗?将*输入=温度;你要复印吗
谢谢。
< P> C++中的内存释放对指针可能没有任何作用。所以函数中的输入指针aka str将在SomeFunction返回后指向释放的内存。该内存释放后的内容,以及它在可用状态下保持多长时间,完全依赖于编译器,并且有些随机。有些编译器,如VisualC++,将在调试版本中用一个模式填充空闲内存,以便更容易捕捉这些错误,但是只有当您使用标准的C/C++操作MalC/FLUE/NEX/DELATE。像Java和C这样的垃圾收集语言以及其他许多语言通常没有这种歧义和错误源。有没有理由使用C++?< /p> 我建议使用一种方法,通过将值复制到对象而不是返回指针来返回值。我不知道你的结构是什么,但我们叫它X:
Function()
{
X thing;
SomeFunction(&thing);
//continue using thing
}
SomeFunction(X* input)
{
X* temp = NULL;
FillInStruct(&temp);
*input = *temp; // copy whole object not just pointer
WTSFreeMemory(temp);
return;
}
我们不知道FillInstructor或WTSFreeMemory做什么,也不知道清理温度的含义。。。当然,你认为这里至少有一些东西是显而易见的,但如果你不努力把必要的细节弄清楚,你是在问那些没有得到他们需要的信息的人的答案——这意味着大多数人会转向下一个问题,一些人会指出这个缺陷,有些人会给你一个答案,这可能是无用的,因为他们不得不猜测你的意思。在我们的世界中,清晰的通信是必不可少的。你能提供一个吗?你可能只是在释放内存后使用数据时有了未定义的行为,它意外地为你工作。没有发生这种情况是什么意思?像Java和C这样的垃圾收集语言以及其他许多语言通常没有这种模糊性和错误源。以决定论为代价,导致了另一个虫族。你赢不了,不能进入这火焰-bait@Wheezil你可以从你的答案中删除你自己的火焰启动器,它不会给答案增加太多anway@Wheezil建议某人在没有任何迹象表明这样的事情对他们来说是合理的情况下更改他们的编程语言是非常不合理的。如果你认为他在提供火饵,你可能应该把汽油放在一般人够不着的地方。