gpt4 book ai didi

c++ - 为什么 Windows 的 gflags 不会因这段代码而崩溃?

转载 作者:行者123 更新时间:2023-11-28 01:04:24 26 4
gpt4 key购买 nike

我做了以下程序:

int main() {
int* p = new int[10];
delete[] p;
p[0] = 0;
return 0;
}

然后我在启用 gflags 的情况下执行了这个程序:

C:\tmp\Test2\Debug>"C:\Program Files\Debugging Tools for Windows\gflags.exe" -p /enable Test2.exe /full
path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
test2.exe: page heap enabled

C:\tmp\Test2\Debug>test2

C:\tmp\Test2\Debug>

正如预期的那样,程序崩溃了。使用调试器运行它,我可以看到它在这一行崩溃:

p[0] = 0;

这是我所期望的。

但是,这个程序不会崩溃:

int main() {
int* p = new int[10];
p[10] = 0;
return 0;
}

为什么 gflags 没有捕捉到这种越界访问?一般gflags检测到哪些堆错误,哪些错误检测不到?

最佳答案

但是这个程序不会崩溃:

int main() {
int* p = new int[10];
p[10] = 0;
return 0;
}

为什么 gflags 没有捕捉到这个?

因为 new 操作通常会分配比您想要的更多的内存,以达到内存对齐的目的。如果你想让它崩溃,只需使用 p[1025] = 0; 或更大的东西。

关于c++ - 为什么 Windows 的 gflags 不会因这段代码而崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138659/

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