gpt4 book ai didi

c - dlmalloc 在 Win7 上崩溃

转载 作者:可可西里 更新时间:2023-11-01 09:22:08 25 4
gpt4 key购买 nike

一段时间以来,我一直很高兴地使用 dlmalloc对于跨平台项目(Windows、Mac OS X、Ubuntu)。然而,最近似乎使用 dlmalloc 会导致 Windows 7 上的退出时崩溃。

为了确保它在我的项目中不是什么愚蠢的东西,我创建了一个 super 最小的测试程序——它除了从 main 返回之外什么都不做。一个版本(“malloctest”)链接到 dlmalloc,而另一个(“regulartest”)则没有。在 WinXP 上,两者都运行良好。在 Windows 7 上,malloctest 崩溃。您可以看到测试的截屏视频 here .

我的问题是:为什么会这样?它是 dlmalloc 中的错误吗?还是 Windows 7 中的加载程序发生了变化?有解决方法吗?

仅供引用,这是测试代码(test.cpp):

#include <stdio.h>

int main() {
return 0;
}

这是 nmake 生成文件:

all: regulartest.exe malloctest.exe

malloctest.exe: malloc.obj test.obj
link /out:$@ $**

regulartest.exe: test.obj
link /out:$@ $**

clean:
del *.exe *.obj

为简洁起见,我不会在这篇文章中包含 dlmalloc 源代码,但您可以获取它 (v2.8.4) here .

编辑:查看这些其他相关的 SO 帖子:

最佳答案

看起来像是 C 运行时中的错误。在 Windows 7 上使用 Visual Studio 2008,我重现了同样的问题。通过在 dlmallocdlfree 中放置断点进行一些快速调试后,我看到 dlfree 被调用时使用了一个它之前从未从 dlmalloc,然后不久之后它遇到了访问冲突。

幸运的是,C 运行时的源代码与 VS 一起分发,所以我可以看到对 free 的调用来自 _file 中的 __endstdio 函数.c。相应的分配在__initstdio中,它正在调用_calloc_crt来分配它的内存。 _calloc_crt调用_calloc_impl,后者调用HeapAlloc获取内存。 _malloc_crt(在 C 运行时的其他地方使用,例如为环境和 argv 分配内存),另一方面,直接调用 malloc_free_crt 直接调用 free

因此,对于使用 _malloc_crt 分配并使用 _free_crt 释放的内存,一切都很好。但是对于使用 _calloc_crt 分配并使用 _free_crt 释放的内存,会发生不好的事情。

我不知道是否支持像这样替换 malloc -- 如果支持,那么这是 CRT 的错误。如果没有,我建议研究不同的 C 运行时(例如 MinGW 或 Cygwin GCC)。

关于c - dlmalloc 在 Win7 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com