Gal*_*axy 1 c++ memory pointers shared-memory
假设我有一个错误的指针,我会增加以查看下一个内存位置内的内容.我的代码工作正常,没有任何错误或问题.我只是打印出这些内存位置的内容.我在屏幕上看到输出,其中一些内存位置的值为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;
}
Run Code Online (Sandbox Code Playgroud)
TL; DR这是未定义的行为,不应该这样做.
更实际的答案是它在很大程度上取决于地址.在这个例子中,你正在服用的地址int是在上栈.如果继续递增指针,则基本上是在查看堆栈内存.如果您使用指向调用的指针执行相同的操作,malloc()则会查看整个堆中的内存.
您关于通过更改值来影响操作系统稳定性的问题,除非您在内核空间中,否则答案是否定的.但是,如果您在内核空间中运行的驱动程序中执行此操作,则可能会导致操作系统崩溃.
这个答案绝对不是详尽无遗的,并且令人难以置信的手工波浪,因为你的问题有很多细微差别,所以我推荐你参加TL; DR开头.我建议搜索和阅读基本的计算机体系结构.