gpt4 book ai didi

c++ - Pageheap 不会让我的应用程序中断

转载 作者:行者123 更新时间:2023-11-30 04:34:32 27 4
gpt4 key购买 nike

我预计 Pageheap 会在执行下面代码段中的第二和第三条语句时强制我的应用程序崩溃。但这并没有发生。我为应用程序启用了整页堆。

我应该做些什么额外的事情来使页面堆在第二个和第三个语句处破坏我的应用程序?

char *test =new char[12];
memset(test,'c',15);
test[13] = 'c';

但是如果我使用,下面的语句分页会破坏我的应用程序

memset(test,'c',50);

最佳答案

分配向上舍入 N 字节,其中 N 是 8 的倍数并且取决于您使用的 Windows 版本。对于这种情况,我们假设分配向上舍入到最接近的 8 个字节。

Pageheap 的工作原理是在每个分配的末尾插入一个“保护页”并保护它免受读/写访问,因此任何使用它的尝试都会导致访问冲突。

在这种情况下,您分配的 test 请求 12 个字节。堆管理器实际上为您分配了 16 个字节。访问 test[15] 在此分配范围内,因此它不会访问保护页面。

另外要注意的是,我相信一个完整的页面堆将填充分配返回的具有某些特殊值的“额外”内存。当您释放分配时,它将检查“额外”内存并在值更改时引发异常。

关于c++ - Pageheap 不会让我的应用程序中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926770/

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