为什么Windows的gflags不会因这段代码而崩溃?
Why doesn't Windows' gflags fail to crash with this code?
我编写了如下程序:
int main() {
int* p = new int[10];
delete[] p;
p[0] = 0;
return 0;
}
然后我在启用gflags的情况下执行这个程序:
C:tmpTest2Debug>"C:Program FilesDebugging Tools for Windowsgflags.exe" -p /enable Test2.exe /full
path: SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options
test2.exe: page heap enabled
C:tmpTest2Debug>test2
C:tmpTest2Debug>
如预期的那样,程序崩溃了。用调试器运行它,我可以看到它在这一行崩溃:
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++代码崩溃并具有无限循环
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 赋值运算符在我制作类模板时使代码崩溃
- 为什么这段代码崩溃了
- 正则表达式捕获会使代码崩溃
- 带有运算符的简单用户定义类 = 重载代码崩溃
- 使用自动循环时代码崩溃
- 当我输入12位数字时,为什么以下代码崩溃
- 为什么我的代码崩溃了,浮点异常
- PQXX简单代码崩溃了
- 试图通过struct时C 代码崩溃
- 当从共享库运行时,为什么此Android NDK代码崩溃
- 程序在Windows中的DLL边界上使用嵌入式Python/C 代码崩溃
- 对 NULL 值的按位操作是否会使C++中的代码崩溃
- C 程序用退出代码崩溃:9(Sigkill)
- 为什么以下代码崩溃
- 当未选择 /CLR时,编译的MATLAB代码崩溃
- C++Visual Studio Release生成未使用的代码崩溃
- 在RELEASE配置中使用向量push_back时,C++代码崩溃
- RCPP代码崩溃