memory-leaks相关内容
当对象的指针返回并且程序员忘记删除它时,会出现大部分内存泄漏。 例如: class my_class { ... }; my_class * func1() { my_class * c = new my_class; return c; } int main() { my_class * var1 = func1(); ... //程序
..
我们在大多数代码中使用CString类。但是有时我们需要转换为char *。目前我们一直在使用variable.GetBuffer(0),这似乎工作(这主要发生在传递Csting到一个函数,其中的函数需要一个char *)。 然而,我们最近担心这是如何工作的,以及是否有更好的方法。 我理解它的工作方式是将一个字符指针传递到指向CString中的第一个字符的函数,并且一切正常。 我
..
我需要帮助了解我的内存分配和释放在Windows上的问题。我现在使用VS11编译器(VS2012 IDE)与最新的更新(更新3 RC)。 问题是:我动态分配一个内存2立即释放它。仍然,在内存分配之前,我的进程内存使用量在分配前为0.3 MB,在分配上为259,6 MB(分配时为32768个64位整数(8字节)的数组,预期),在分配期间为4106,8 MB,但在解除分配内存不会下降到预期的0.
..
此回答引用了C ++ 11标准版3.8: 如果没有显式调用析构函数,或者如果没有使用delete-expression(5.3.5)来释放存储,那么析构函数不会被隐式调用,析构函数产生的边效应具有未定义的行为。 关于析构函数未被调用的部分是清楚的。现在假设跳过的析构函数有副作用,应该影响程序的行为。 为什么程序行为现在未定义?为什么不跳过副作用(因为析构函数不被调用),程序正常运
..
我使用链接列表实现稀疏矩阵,手动检查泄漏和任何想法是没有乐趣的。 解决方案 valgrind profiler for Unix提供了一个不错的泄漏检测。 然而,这只是成功方法的一部分。另一部分是防止(即最小化)显式存储器处理。智能指针和分配器可以帮助大量防止内存泄漏。此外, 使用STL类: std :: list 已经提供了无泄漏的链表实现。
..
当为字符串赋值时,Valgrind报告内存泄漏 我使用这个简单的代码来测试valgrind报告的内存泄漏。 / ******************************** ********** * FILE:t3.c *编译时使用:g ++ -g t3.c -o t3 * * $ g ++ - v *从/usr/lib/gcc/i686-pc-linux-
..
有任何建议吗?本SO文章介绍了视觉泄漏检测器,但我正在寻找其他工具。此外,请不要推荐此。 解决方案 我最近使用过视觉泄漏探测器它工作相当不错。这是非常简单的(只是包括 vld.h ),不需要任何工具。我发现我需要写一对夫妇的脚本,但是将输出解析为对我的目的更有用(它正在哭泣出一个体面的GUI)。注意新网站 - 该项目正在Codeplex上积极维护 - Codeproject链接很旧。
..
从讨论开始这里,我想知道以下代码是否有内存泄漏: int main() { new int(); //或 int * x = new int(); return 0; } 我知道内存被操作系统回收, ?我相信它是。 什么定义了内存泄漏?我只能在标准中找到一个参考,这不是很有帮助。 编辑:我不想开始辩论 - “我认为...“不是我想要的那种
..
最近我开始研究C ++中的内存泄漏,所以我可能会问一个幼稚的问题。 我有一个使用OpenSSL的c ++库 - 我的任务是检查是否有内存泄漏这个lib。我已经运行Visual Leak Detector检查mem泄漏了。 我看到调用 SSL_library_init(); 和 SSL_load_error_strings ); 是领先的泄漏 - 快速搜索显示在使用结束时,我必须调用以下
..
class someclass {}; class base { int a; int * pint; someclass objsomeclass; someclass * psomeclass; public: base() { objsomeclass = someclass(); psomeclass = new someclass(); pi
..
如果我编程了而不知道内存泄漏,应用程序终止,解决方案 是的,“内存泄漏”只是一个进程不再引用,因此不再可以释放的内存。 更新 在绝大多数情况下,操作系统将释放内存,就像Windows,Linux,Solaris等普通“风格”的情况一样。然而,重要的是要注意,专用环境(例如各种实时操作系统),程序终止时内存可能不会被释放。
..
可能重复: 不要调用 delete new 或 new []或 ] 在C ++程序中是一个未定义的行为或只是一个内存泄漏? 欢迎来自标准的参考(如果有)。 这是在
..
我正在使用pthread库编写程序。当我使用命令valgrind --leak-check = full运行我的程序时,我得到以下错误描述: == 11784 == == 11784 == ** HEAP SUMMARY:** == 11784 == in in exit:4,952 bytes in 18 blocks == 11784 == total heap usage
..
我有一个向量,我用对象的指针填充。我试图学习良好的内存管理,并有几个一般问题: 这是真的,当我完成了矢量, 为什么我不必在向量或任何其他变量上调用delete而不使用新语句,但delete必须是 如果向量在函数中声明返回(导致向量超出范围),C ++是否会为我释放指针的内存? 解决方案 是 实现使用模板内存分配器,为您处理内存管理,所以他们有点特别。但是,作为一般的经验法则
..
我是Windows平台上的C ++程序员。我使用Visual Studio 2008。 我通常在代码中出现内存泄漏。 通过检查代码找到内存泄漏,但它是繁琐的,并不总是一个好的方法。 由于我买不起付费内存泄漏检测工具,我希望你们建议最好的方法来避免内存泄漏。 我想知道程序员如何找到内存泄漏。 是否有任何标准或过程 您需要的东西 熟练使用C ++ C ++编译器
..
在我的OpenSSL客户端我有问题,我选择链接libeay32和ssleay32静态,而不是动态我有大量的内存泄漏错误从视觉泄漏检测器。我在此主题中复制了OP中的命令,但我还剩下6个。然后我在同一个线程中添加了 sk_SSL_COMP_free(SSL_COMP_get_compression_methods()); ,由4LegsDrivenCat建议,只剩下4个,所有这些都显然与加载受信任的证
..
我真的不敢相信我找不到这个...的清晰答案。 如何释放在C ++类构造函数之后分配的内存throw在使用 new 运算符初始化的情况下为异常。例如: class Blah { public: Blah() { throw“oops”; } }; void main() { Blah * b = NULL; try { b = new Blah()
..
Obj * op = new Obj; Obj * op2 = op; delete op; delete op2; //这里发生了什么? 当你不小心删除时,会发生什么?有关系吗?是编译器会抛出一个错误? 解决方案 它导致未定义的行为。任何事情都可能发生。实际上,运行时崩溃可能是我期望的。
..
我越来越疯狂地理解valgrind错误。我有一个名为Matrix的模板类,它有一些重载的操作符等...做一些数学运算。 Matrixes在一个名为ExtendedKalmanFilter的类中使用。 这里是valgrind跟踪: == 3352 ==无效读取大小8 == 3352 ==在0x804CC8F:BOViL :: math :: Matrix :: o
..
结果很多无辜的东西是未定义的行为在C + +。例如,一旦非空指针 delete 'd 甚至打印出指针值是未定义的行为。 泄漏肯定是坏的。 解决方案 内存泄漏。 没有未定义的行为。这是完全合法的泄漏内存。 未定义的行为:是动作标准具体不想定义和离开到实现,以便它是灵活的执行某些类型 内存管理定义明确。 如果您动态分配内存,但不释放内存。然后内存仍然是应用程序的管
..