gpt4 book ai didi

c++ - 在 C++ 中更改越界指针的取消引用是否安全?

转载 作者:行者123 更新时间:2023-11-30 00:45:33 24 4
gpt4 key购买 nike

假设我有一个错误的指针,我递增它以查看下一个内存位置中的内容。我的代码工作正常,没有任何错误或问题。我只是打印出这些内存位置的内容。我在屏幕上看到输出,其中一些内存位置的值为 0,其他内存位置包含一些似乎按模式排列的大负数或正数。但是,如果我尝试更改或覆盖这些内存位置的内容怎么办?他们代表什么?这些内存位置可能存储什么样的数据,如果更改足够多的这些内存位置,是否有可能破坏操作系统?

  #include <iostream>
using std::cout;
using std::endl;
int main() {
int num1 = 5;
int* bad_ptr = &num1;
cout << "Address of num1: " << &num1 << endl;
cout << "Dereference bad pointer: " << *bad_ptr << endl;

// The bad pointer acesses 500 memory addresses
for (int i = 0; i < 500; i++) {
bad_ptr++;
cout << "Dereference bad pointer: " << *bad_ptr << endl;
// What if I try to change it?
// *bad_ptr = 1;
}
return 0;
}

最佳答案

TL;DR 这是未定义的行为,不应该这样做。

更实际的答案是,这在很大程度上取决于地址。在本例中,您获取了 stack 上的 int 的地址。 .如果你继续增加指针,你基本上是在查看堆栈内存。如果您要对来自对 malloc() 的调用的指针执行相同的操作,您将查看堆中的内存。

关于通过更改值影响操作系统稳定性的问题,除非您在内核空间中,否则答案是否定的。但是,如果您在内核空间中运行的驱动程序中执行此操作,则可能会使操作系统崩溃。

这个答案绝对不是详尽无遗的,而且非常复杂,因为你的问题有很多细微差别,所以我建议你在开头引用 TL;DR。我建议搜索和阅读基本计算机体系结构。

关于c++ - 在 C++ 中更改越界指针的取消引用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021351/

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