传递指针作为参数并进行清理
Passing pointers as arguments and cleaning up
我的代码如下所示:
Function()
{
struct* str = NULL;
SomeFunction(&str);
//continue using str
}
SomeFunction(struct** input)
{
struct* temp = NULL;
FillInStruct(&temp);
*input = temp;
WTSFreeMemory(temp);
return;
}
所以我期望在我清理临时之后,我的输入指针也应该变得无效,并且在第一个函数中,我应该不能再使用我的 str 指针了,因为它已经清理了。 但这并没有发生,我真的不知道为什么。我清理了我的临时指针,但我的输入和 str 指针仍然指向正确的结构,我能够继续使用这些指针。有什么想法吗?将 *输入 = 温度;做某种复制?
谢谢。
释放C++中的内存不会对可能指向它的指针执行任何操作。 因此,您的"输入"指针(在 Function() 中又名"str")将在 SomeFunction() 返回后指向释放的内存。 释放后内存的内容以及它保持可用状态的时间完全依赖于编译器,并且有些随机。 某些编译器(如 Visual C++)会在"调试"版本中使用模式填充释放的内存,以便更轻松地捕获此类错误,但前提是使用标准的 C/C++ 操作(malloc/free/new/delete)。
像Java和C#这样的垃圾收集语言(以及许多其他语言)通常没有这种歧义和错误来源。 有什么理由需要使用C++吗?
我建议一种方法,通过将值复制到对象中而不是返回指针来返回值。 我不知道你的"结构"是什么,但让我们称之为"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;
}
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)