gpt4 book ai didi

c - 在具有较大值(value)的Visual Studio中重新分配失败

转载 作者:行者123 更新时间:2023-12-05 01:20:49 24 4
gpt4 key购买 nike

当我在VS2013中运行此代码时,它无法显示“ realloc test.exe触发了断点”。而且我不知道为什么,有什么想法?(尽管如果我尝试重新分配较小的值也可以)

#include<stdlib.h>
#include <limits.h>
int main()
{
char *big = malloc(100);
char *c;
//c = malloc(INT_MAX);// this line works perfectly, on a 32bit build it will be = NULL
c = (char *)realloc(big, INT_MAX);//this one triggers a breakpoint!(or that's what visual studio says)
return 0;
}


编辑:我正在为32位目标构建它,通过VS的默认设置,该目标将不允许访问超过2个Gib(几乎),因此它应该在这里失败,但只返回不触发断点的NULL指针即可!

注意:我正在将其构建为RELEASE

最佳答案

调试断点由调试Windows堆管理器触发。即使使用发行版CRT,如果在调试器下启动该进程,Windows堆也会启用调试检查。您可以通过在开始调试过程之前(或在项目的调试设置中)将环境变量_NO_DEBUG_HEAP定义为1来禁用这些调试检查。

CRT调试堆也具有类似的检查(默认情况下)针对非常大的分配进行断言,但是此检查仅在调试CRT中存在(发行版CRT实际上在其堆实现中没有逻辑,它只是调用操作系统堆功能)。

我们正在研究用于解决这两个问题的选项,以供将来的发行版使用。同时,如果您的代码在调试断点上跳闸,我建议通过定义上述环境变量来禁用Windows调试堆。

关于c - 在具有较大值(value)的Visual Studio中重新分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211878/

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