释放空指针会导致以下弹出消息
Freeing a null pointer causes following pop up message
我有一些内存密集型代码,后面跟着以下语句
free(array1); // array1 is NULL
我本质上是在一个空指针上调用free。我的理解是,意外地在NULL指针上调用free是安全的。然而,当执行free语句时,我得到了以下弹出窗口。
"Windows在app.exe中触发了一个断点。这可能是由于堆损坏,这表明app.exe或其加载的任何DLL中存在错误。">
这是否意味着free调用NULL指针是不安全的,或者这是否表明我的程序中可能存在内存问题?
当我取消对free语句的注释时,一切正常。
在NULL指针上调用free()
是绝对安全的,因此您必须在早期损坏堆。也就是说,在崩溃之前放入一个print语句来保证array1真的为NULL可能是值得的。如果你不能发现错误,你可能不得不求助于工具来帮助你——关于这种堆使用验证工具有很多问题。
支持文档:您使用的是Windows,但API是C语言标准化的:请参阅上的"如果ptr为NULL,则不执行任何操作"http://linux.die.net/man/3/free
当然,您应该检查new
/new[]
/malloc
-或-realloc
是否与delete
/delete[]
/realloc
-或-free
正确配对。不过,在C++中使用malloc
/free
是有正当理由的——最明显的是为了与C代码的互操作性,偶尔也会因为realloc
的就地增长带来潜在的性能优势。
"当我取消对free语句的注释时,一切正常。"-最好不要依赖于此。。。如果你的程序滥用堆,它可能会在任何时候崩溃,例如一些运行而不是其他运行,在你的代码中任何地方看似最微小的无关更改之后,在更改编译器标志之后,使用无害的输入更改,甚至在另一台电脑上部署相同的可执行文件。…
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 在函数内初始化无符号字符指针将返回空指针
- 为什么多维数组中的空字符串文本衰减为空指针?
- C++ 取消引用指向矢量的空指针时的分段错误
- 错误 C6011:取消引用空指针"NAME"。C++
- cppcheck取消引用空指针
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 递增空指针无法正确设置值
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上
- 释放空指针会导致以下弹出消息