我读到,未初始化的指针(在 C 中)可能指向包含来自其他程序的数据或程序代码的地址。书中说,这可能会造成损害。
这个问题是现代操作系统的问题吗?我知道,在 Linux 中,存在虚拟地址空间,因此地址仅与特定进程相关联。这样,指针就不应该指向其他进程使用的地址?我不知道 Windows、macOS 还是 Unix 是否如此。
如今这是一个严重的问题吗?
答案1
对于 Windows、MacOS 和 Unix 也是如此。在所有这些系统上的通常情况下,未初始化的指针只能导致当前进程内的意外行为。
这并不是说它可以绝不发生。在所有这些系统中,可以安排一个进程自愿与其他进程共享内存区域(通过使用shmget
/shmat
或mmap
),在这种情况下,一个进程中的错误指针可能会破坏共享数据,从而导致其他进程行为不当。