为什么我的程序可以访问不属于它的堆内存?[复制]

Why can my program access heap memory not belonging to it? [duplicate]

提问人:Ewilipsic 提问时间:11/11/2023 最后编辑:trincotEwilipsic 更新时间:11/11/2023 访问量:101

问:

在另一个程序中,我不小心访问了超出范围的索引 但是,它没有给我一个错误

我能够用更少的代码复制它


#include <iostream>

int main() {
    int* p = new int[10];
    for(int i = 0;i<1000;i++){
        std::cout<<p[i];
    }
    return 0;
}

这输出了一堆垃圾值,但我相信它应该给我一个分割错误。

编译器是 g++

C++ 堆内存 new-operator cout

评论

4赞 Some programmer dude 11/11/2023
C++ 没有任何边界检查。作为程序员,你要确保你的代码不会做这样的坏事。
4赞 πάντα ῥεῖ 11/11/2023
因为未定义的行为是未定义的。
1赞 harold 11/11/2023
您在这里只访问了 4000 个字节,这不足以访问无法访问的页面也就不足为奇了
1赞 HolyBlackCat 11/11/2023
“C++没有任何边界检查”或者至少不是默认的。以下是启用它们时发生的情况: gcc.godbolt.org/z/EajxMYjhG
2赞 gast128 11/11/2023
如果要进行绑定检查,请使用 std::vector 或 std::array 和 'at' 访问器。一般来说,除非有特定原因,否则应使用标准容器。

答: 暂无答案