我已经设置了一个测试工具来测试我正在为项目开发的DLL中的一组函数.
我想验证这些函数在Windows系统上没有内存泄漏.
我已正确设置UMDH,并且我能够在两个堆转储之间获得比较文件.即使堆栈迹线也很好.
差异的输出困扰着我,我希望有人可以帮助解释我为什么得到我得到的输出.
+ 56 ( 56 - 0) 1 allocs BackTrace9C160
+ 1 ( 1 - 0) BackTrace9C160 allocations
Run Code Online (Sandbox Code Playgroud)
我将log1和log2设置为1个整数分配,只是为了验证我的设置.
实际上,它只显示了1个分配,但是,它表示从之前和之后有56个字节的变化.我只希望sizeof(int)以字节为单位进行更改.在我的系统上,int分配的size是4个字节,所以我期望看到+4,而不是+56.
同样,在日志之间运行的唯一代码行是
new int; //purposely leak memory
Run Code Online (Sandbox Code Playgroud)
有什么解释吗?
IDE /编译器:Visual Studio 2010
应用程序是64位
涉及一个DLL(但我在这个简单的int分配示例中甚至没有调用它)
如果我注释掉泄漏,我得到零分配和+0字节.所以我认为这可以验证应用程序中的任何其他地方都没有额外的字节,只需从上面显示的那一行...
请参阅下面的SleuthEye解决方案.此外,我在评论中添加了一条评论,我认为该评论对最终使用此问题的人有益:
此外,如果您在.exe的发布版本上运行此程序并在运行目录中包含程序调试数据库,则umdh将提取源文件名和内存泄漏的行号,同时保持准确的字节数.就内存泄漏搜索而言,这为您提供了调试和发布版本的优势.
这是我发现自己无法使用正常的谷歌搜索/堆栈溢出/ youtubing例程的第一个问题.
我正在尝试在C++环境中编译一个最小的Lua程序,以确保我的环境已经准备好开发.Lua语言稍后将用于我的C++游戏的用户界面编程.
Windows 7 64位
Visual Studio 2010
Lua for Windows 5.1(我可以从谷歌代码下载的最新版本)
// UserInt.cpp : Defines the entry point for the console application.
//
#pragma comment(lib,"lua5.1.dll")
#include "stdafx.h"
#ifndef __LUA_INC_H__
#define __LUA_INC_H__
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
int _tmain(int argc, _TCHAR* argv[])
{
lua_State * ls = luaL_newstate();
return 0;
}
#endif // __LUA_INC_H__
Run Code Online (Sandbox Code Playgroud)
1>UserInt.obj : error LNK2019: unresolved external symbol _luaL_newstate referenced in function _wmain
1>c:\users\deank\documents\visual studio 2010\Projects\UserInt\Debug\UserInt.exe : fatal …