我知道一些Java而且现在正在尝试使用C++而且显然在C++中你可以做一些事情,比如声明一个大小为6的int数组,然后改变那个数组的第10个元素,我理解它只是之后的第4个字节.为6整数数组分配的内存部分的结尾.
所以我的问题是,如果我不小心可能会意外地改变我的系统中其他程序正在使用的C++程序中的内存?是否存在以这种方式严重搞乱某些事情的实际风险?我的意思是我知道你可以重新启动计算机并清除内存,但如果我不这样做,可能会有一些持续的损害.
Jam*_*nze 16
这取决于您的系统.正式地,越界访问是未定义的行为.在现代通用系统中,每个用户进程都有自己的地址空间,一个进程不能修改甚至读取另一个进程的进程(禁止共享内存),所以除非你编写内核代码,否则你不应该'能够破坏你自己进程之外的任何东西(非内核代码通常不能进行物理IO,所以我看不出硬件中的任何东西会破坏).
但是,如果您正在编写内核代码,或者在没有内存映射或保护的嵌入式处理器上工作,那么您可以通过越界写入来破坏硬件; 如果程序控制的是像核电站这样的东西,你甚至可以摧毁比运行代码的机器更多的东西.
每个进程都有自己的虚拟地址空间,因此自然进程看不到彼此的内存.不要忘记,即使是程序本地的缓冲区溢出也会产生可怕的后果 - 溢出可能会导致程序行为异常并执行具有持久影响的操作(例如删除所有文件).