0
我试图为使用GFlags的小应用程序启用页堆,但由于某些原因,它不起作用。Windows GFlags应用程序堆损坏检测
我写了一个小的C++应用程序,它是所有破坏堆内存:
int* a;
a= (int*)malloc(1);
*a= 8888800;
return 0;
当运行该代码的应用程序不会崩溃。 但是在启用页堆的情况下,我期望它在第三行。
我怀疑我没有正确激活GFlags,但无法弄清楚问题所在。在图像文件选项卡中运行GFlags exe后,我将路径复制到我的exe文件并标记为启用页堆并停止在异常选项上。我检查了CMD并看到页面堆已启用。可能是什么问题呢?
你有*未定义的行为*。当你有UB时会发生什么,*,*,*,并且你无法预测它。在某些情况下,它似乎可以正常工作,而在其他情况下,它会导致崩溃,有时甚至可能会得到[鼻恶魔](http://catb.org/jargon/html/N/nasal-demons.html)。这也是为什么不应该在C++中使用'malloc'的一个很好的例子。 –
那么,有什么方法可以证明GFlags的工作原理,并将为我们的产品在那里工作? –
@Someprogrammerdude:是不是未定义的行为滥用语言的东西?恕我直言,这不是C++语言的滥用,因为编译器确切地知道该怎么做。所以问题是WIndows如何通过内存管理来处理这种情况。编译器无法知道'malloc()'分配了多少字节。如果参数'1'表示1 kb,那么一切都很好。 –