heap-corruption相关内容
我是 Windows 编程的新手,我刚刚“浪费"了两个小时来寻找每个人似乎都知道的错误:您无法在 DLL 的堆上创建对象并在另一个 DLL 中销毁它(或在主程序). 我几乎可以肯定,在 Linux/Unix 上情况并非如此(如果是,请说出来,但我很确定我这样做了数千次没有问题......). 此时我有几个问题: 1) 静态链接的 DLL 是否使用与主程序不同的堆? 2) 静
..
我在堆损坏方面遇到了一些问题.使用 CreateWindowExW 函数时可以观察到警告.我知道这通常是内存错误,但在这种情况下我怎么能找到它呢?在调用 CreateWindowExW 之前没有新变量,我无法进入这个函数.这是代码. HWND GetMainWnd(HINSTANCE hInstance){静态 HWND hWnd = NULL;如果 (hWnd)返回 hWnd;RETURN_A
..
我的程序抛出了一个catch(Exception e)块无法处理的错误,然后它崩溃了: 访问冲突损坏状态异常. 这很奇怪,因为据我所知,非托管代码会抛出损坏的状态异常,而在这里我在调用 StringBuilder 方法. 代码在后台线程中运行,并且不时崩溃,无法轻松重现.所以我将 WinDbg 附加到进程中,并有以下异常堆栈: 000000001dabd8c8 000007fe
..
我正在尝试使用 _snwprintf_s 来连接两个字符串.我还想在每个字符串后附加 \r\n. 所以我分配了一个 wchar 缓冲区,最初包括两个字符串的 \r\n 和 null.我试着一个接一个地打印. 我看到两个字符串都被写入了.但是当尝试释放(wbuff)时,它会给我一个“堆损坏"错误.我不知道我在哪里越界了. 我哪里出错了?让我知道.谢谢 int main(){WCH
..
我将 VTK 与 MSVC 一起使用,并在尝试加载数据时出现奇怪的行为.我对它进行了一些修改,即使是以下代码也会产生堆损坏,您知道发生了什么或可能出了什么问题吗? vtkAbstractArray *vtkDataReader::ReadArray(const char *dataType, int numTuples, int numComp){char* type=strdup(dataTy
..
我的项目是像std :: vector这样的动态数组包装器.这是这样的: 添加新元素时,如果内存为0,则分配内存(malloc),如果不为0,则以新大小重新分配内存(realloc).大小为元素数*类型的大小 当获得已经添加的元素时,我通过将其索引乘以类型的大小并将其添加到分配内存的地址来计算地址 注意:我自己编写和读取内存,没有memcpy或memset之类的功能.这是我的项目
..
我很清楚这样的问题不计其数,但是我搜索了数小时却无法理解我做错了什么,因此,非常感谢您的帮助.(我是编程新手) 作为作业的一部分,我需要创建各种字典管理器,但是删除单词似乎有问题.我收到一条错误消息"...触发了断点". 人们对这个问题的通常答案是这是由于越界导致的堆损坏,但我不知道是否以及如何造成了此问题. 我已经用公交信息管理做了一些类似的事情,并且它工作得非常好,这使我更加
..
我知道我可以使用WinDbg + PageHeap + ApplicationVerifier-Microsoft工具. 我读到有很多可用于C ++的工具,想知道C#是否存在类似的东西? 解决方案 这些是用于解决行为不当的 native 代码的工具.访问冲突,堆损坏,资源泄漏之类的事情.依靠安全代码和垃圾收集器的概念,在纯托管代码中根本不会发生这种情况.如果您对托管项目中的本机代码有
..
我在Visual Studio 2015的这一行上遇到了一个异常.它的构建没有错误. _free_dbg(block,_UNKNOWN_BLOCK); 这就是我声明新的指针数组的方式: Cshipship * pAirShip [10]; 这是我删除 pAirShip 指针数组的方式: for(int i = 0; i
..
我有一个简单的矩阵类,可以与opengl一起使用(es 2.0,afaik没有针对该特定版本的opengl的任何内置版本). 基本上,它只是一个向量,该向量的大小已调整为在构造函数中包含16个浮点数(我为它具有的=运算符选择了一个仅在16个浮点数数组上的向量),以及一些对opengl的上下文.无论如何,这些便利结构之一将身份矩阵加载到向量中,它是: void Matrix::loadI
..
我有一个c ++ dll,可为我的主要c#应用程序提供某些功能。 在这里,我尝试读取文件,将其加载到内存中,然后将一些信息(例如,指向已加载数据的指针和返回给c#的内存块数)返回。 Dll成功将文件读取到内存,但是在返回主应用程序时,由于堆损坏而导致程序崩溃(检测到严重错误c0000374)。 代码非常简单,简单明了,我之前也做过类似的事情,没有问题,但是我无法弄清楚是什么原因造成的,我尝
..
glibc似乎有多种方法来进行堆检查: 带有M_CHECK_ACTION参数的mallopt MALLOC_CHECK_环境变量 mcheck函数家族 现有文档令人困惑。 手册根本没有列出M_CHECK_ACTION描述Mallopt时。 此mallopt手册页,但确实描述M_CHECK_ACTION。另外,它说它等效于环境变量MALLOC_CHECK _: MALLOC_
..
在一个生产站点上,我们的应用程序(*)反复崩溃,但不可重复.分析崩溃转储可以清楚地表明这是堆损坏:崩溃位于不同的位置,但始终在kernel32!HeapFree/ntdll!RtlpLowFragHeapFree内部访问冲突. Win Dbg !analyze -v还报告了堆损坏. 到目前为止,我们一直尝试使用页面堆.问题在于页面堆的内存开销使得应用程序将不再运行(达到32位进程的虚拟内存限
..
int main() { char myString = NULL; realloc(&myString, 5); strncpy((char *)&myString, "test", 5); } 似乎可以正常工作,但是我对堆栈还是堆还是有些困惑.可以吗?如果允许,myString是否需要手动释放,还是在超出范围时将其释放? 编辑:感谢您的答复,所以我认为这同样是非法的
..
我的C程序似乎内存损坏.我使用_ASSERTE( _CrtCheckMemory( ) );查找问题说明,并且该语句在其前面的一行上显示了scep_conf->engine_str = NULL;.因此,如果我理解正确,那之前的malloc发生了什么事,对吧? 这是导致问题的代码部分: scep_conf = (SCEP_CONF *) malloc(sizeof(scep_conf)
..
我编写了以下程序: #include #include #include void main(int argc, char *argv[]){ char *input; input = (char*)malloc(16); printf("input is : %s\n", input); } 当我以此方式运行时
..
我有一个类似以下原型的函数: void function(std :: string str); 在另一个加载和使用该DLL的程序的主函数中调用此函数。 > function(“some string value here”); 从此函数返回时,我收到堆损坏错误: Windows已经在program.exe中触发了断点。
..
我是Windows编程的新手,我刚刚“迷失了”两小时,狩猎一个大家似乎都知道的错误:你不能在一个DLL中的堆上创建一个对象,并在另一个DLL(或主要程序)。 我几乎肯定在Linux / Unix这不是这种情况(如果是,请说,但我很确定我做了这么几千次没有问题...)。 此时我有几个问题: 1)静态链接的DLL使用与主程序不同的堆栈? 2)静态链接的DLL是否映射在主程序的相
..
我正在调试 GC 堆腐败,并进入了我的步骤想尝试在WinDbg + PageHeap + AppVerifier + GCStress下运行程序。 我在文章中找到了 软件崩溃:故障模块mscorwks.dll,版本1.1.4322.2379 我可以这样启用GCStress: reg.exe添加“HKLM\SOFTWARE\Microsoft\.NETFramework”/ f / v
..
我正在开发一种用于对象识别的乳房成像特征,使用FlannBasedMatcher来计算空间直方图。 Mat ComputeSpatialHistogram ,Mat词汇,int * region_index,int level,Ptr flann_matcher) { int vocab_size = vocabulary.rows; Mat
..