Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何确定C+中发生内存泄漏的位置+;?_C++ - Fatal编程技术网

C++ 如何确定C+中发生内存泄漏的位置+;?

C++ 如何确定C+中发生内存泄漏的位置+;?,c++,C++,我的程序中有内存泄漏,我正在尝试确定它泄漏的位置 如果你能对这个问题有所了解,请这样做。分析工具应该能够提供帮助。 例如: 此外,您还可以尝试检查编译器中的所有警告消息 编辑:我错过了关于“没有工具”的部分 我认为检查编译器警告是很好的第一步 您还可以尝试在所有free/delete代码周围放置调试语句,以确保释放的内容有效 查找常见的错误,例如:“删除ptr”而不是“删除[]ptr” 只需对代码中的所有“new”和“delete”语句进行grep/搜索,看看它们是否有意义。分析工具应该能够提供

我的程序中有内存泄漏,我正在尝试确定它泄漏的位置


如果你能对这个问题有所了解,请这样做。

分析工具应该能够提供帮助。 例如:

此外,您还可以尝试检查编译器中的所有警告消息

编辑:我错过了关于“没有工具”的部分

我认为检查编译器警告是很好的第一步

您还可以尝试在所有free/delete代码周围放置调试语句,以确保释放的内容有效

查找常见的错误,例如:“删除ptr”而不是“删除[]ptr”


只需对代码中的所有“new”和“delete”语句进行grep/搜索,看看它们是否有意义。

分析工具应该能够提供帮助。 例如:

此外,您还可以尝试检查编译器中的所有警告消息

编辑:我错过了关于“没有工具”的部分

我认为检查编译器警告是很好的第一步

您还可以尝试在所有free/delete代码周围放置调试语句,以确保释放的内容有效

查找常见的错误,例如:“删除ptr”而不是“删除[]ptr”


只需grep/搜索代码中的所有“new”和“delete”语句,看看它们是否有意义。

检查crtdbg类的"CrtDumpMemoryLeaks()函数

检查crtdbg类的"CrtDumpMemoryLeaks()函数

,因为问题(现在)说“不使用任何工具”,然后,您可能需要查看源代码。一个要看的地方是每个类的构造函数和析构函数

  • 构造函数分配的所有内存都是由析构函数释放的吗
  • 如果类中的其他方法分配内存,则该内存是由析构函数释放的吗
否则,请查找
new
(所有种类)的实例,并确保您可以确定释放分配内存的位置

<>和,如果你被误导,通过C代码> MARROCK()//>代码>代码> > RealCube()/代码>,和()(代码)>在你的C++代码中,然后在每个分配上做一个类似的练习,确保你知道相应的版本在哪里。(我假设您永远不会尝试
删除
malloc()分配的
空间
也不会尝试
free()
分配的
空间)

考虑是否应该使用各种自动指针管理器类之一来确保释放内存

您可能最好使用可用的工具来突出显示泄漏发生的位置。

因为问题(现在)说“不使用任何工具”,那么您可能需要查看源代码。一个要看的地方是每个类的构造函数和析构函数

  • 构造函数分配的所有内存都是由析构函数释放的吗
  • 如果类中的其他方法分配内存,则该内存是由析构函数释放的吗
否则,请查找
new
(所有种类)的实例,并确保您可以确定释放分配内存的位置

<>和,如果你被误导,通过C代码> MARROCK()//>代码>代码> > RealCube()/代码>,和()(代码)>在你的C++代码中,然后在每个分配上做一个类似的练习,确保你知道相应的版本在哪里。(我假设您永远不会尝试
删除
malloc()分配的
空间
也不会尝试
free()
分配的
空间)

考虑是否应该使用各种自动指针管理器类之一来确保释放内存


您可能最好使用可用的工具来突出显示泄漏发生的位置。

如果您拒绝使用其他工具,您将被1.0版的人眼卡住。不幸的是,除非代码非常简单,否则这可能并不容易。我并不是说这话听起来很难听,但在设计良好的代码中,内存泄漏是极其罕见的。这意味着,您正在处理的代码很有可能在一开始就存在一些相当严重的问题,在这种情况下,通过检查发现泄漏可能会非常缓慢和痛苦


检查的明显出发点是所有使用
new
malloc
calloc
,等等,并且(应该)匹配调用
delete
free
,等等。

如果你拒绝使用其他工具,你几乎被人类眼球(1.0版)卡住了。不幸的是,除非代码非常简单,否则这可能并不容易。我并不是说这话听起来很难听,但在设计良好的代码中,内存泄漏是极其罕见的。这意味着,您正在处理的代码很有可能在一开始就存在一些相当严重的问题,在这种情况下,通过检查发现泄漏可能会非常缓慢和痛苦


检查的明显起点是所有
new
malloc
calloc
等的使用,以及(应该)匹配调用
delete
free
等。

可能重复,尽管您没有指定您使用的操作系统。没有工具?没有工具,你到底愿意去哪里派斯。没有工具。知道吗?我的意思是。。。你必须使用一些工具。例如,你的计算机和它的操作系统,你的编译器,或者IDE?什么时候你会停止使用工具?就这一点而言,为什么要消除工具?代码分析和分析工具是交易的诀窍。虽然你没有指定你在哪个操作系统上,但可能重复。没有工具?没有工具,你到底愿意去哪里派斯。维索