C++程序结束后内存地址值是否保留及访问地址报错问题
不同程序间变量是否会继承旧值?
不会。现代操作系统为每个进程提供独立的虚拟地址空间,两个不同程序(进程)的虚拟地址数值即便相同,对应的物理内存也完全隔离。当一个进程结束后,操作系统会回收其占用的物理内存,通常会对内存做清零或其他处理后再分配给其他进程。因此新程序中的未初始化变量B,即便虚拟地址和旧程序的A相同,也不会继承A的旧值。
直接访问指定内存地址触发段错误的原因
你代码中访问的0x0001FBDC属于非法内存地址:
- 该地址未被操作系统映射到当前进程的有效地址空间中;
- 即便地址数值存在,也可能属于内核空间(用户态进程无访问权限),或者未分配物理内存。
现代操作系统通过内存保护机制,会阻止进程访问未授权或未映射的内存,这种非法访问会直接触发段错误(Segmentation Fault)。
你的代码示例:
#include <cstdint> int main() { uintptr_t p = 0x0001FBDC; int value = *reinterpret_cast<int *>(p); }
内容的提问来源于stack exchange,提问作者kinan-not-found
相关产品推荐
相关产品推荐

