内存泄漏与否
Memory leak or not?
我在较大代码的中间有一小段代码:
int *p = new int[100];
p += 50;
delete []p;
编译器是否只会从第 51个位置删除内存?我认为确实如此。但是,在数组指针的情况下,编译器包含一个附加项,用于告知分配的对象数。那么,在这种情况下,它不应该继续删除超出分配大小的内存吗?或者它是否删除第 51 个 st–100个元素并将第 1个 st–50th 保留在内存中,在这种情况下可能会发生内存泄漏。
这实际上是未定义的行为。您只能delete
/delete[]
您从new
/new[]
中获得的内容。
这是未定义的行为。C++标准说:
3.7.4.2 释放函数
3 ...否则,行为是未定义的 如果提供给标准库中
operator delete(void*)
的值不是返回的值之一 通过先前调用标准库中的operator new(std::size_t)
或operator new(std::size_t, const std::nothrow_t&)
,并且如果提供给标准库中operator delete[](void*)
的值不是以前调用operator new[](std::size_t)
或operator new[](std::size_t, const std::nothrow_t&)
标准库。4 ...使用无效指针值的影响 (包括将其传递给释放函数(是未定义的。(在某些实现中,它会导致系统生成的运行时错误。
编译器不会分配或删除内存,如果调用不是从 new 获得的指针值,会发生什么取决于操作系统。 唯一可以保证的是它是错误的。
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存