2015-01-21 31 views
0

用C++来说,如果取消引用一个指向已经释放的内存的指针,我将得到一个错误的访问消息并返回到操作系统。有人能够详细解释发生了什么吗?这是一个OS /编译器的面试问题。当C++程序出现运行时错误时发生了什么?

+0

我相信操作系统具有您可以访问/使用的内存段的知识,当您释放某些内容时,将其从列表中移除。所以试图访问这些内存导致OS不允许你使用它(I.E。分段错误)。这是一项安全功能,也有助于防止程序中的静音故障 – 2015-01-21 04:21:12

回答

0

一旦你delete但是,C++把它标记为免费的,并且可以把它交给任何需要它的人。

因为删除指向它的内存块does not zero the value of all pointers。删除内存仅仅会记下内存可用于其他用途。在这种情况发生之前,你不能指望它,在某些编译器/运行时/体系结构组合中,它甚至可能会崩溃。

+0

崩溃是UB的最佳可能结果。它甚至可能工作,只有在向客户展示软件时崩溃 – 2015-01-21 04:40:50

+0

@Bryan Chen:是的。大多数时候它崩溃了,但有一段时间它也可能不会崩溃,以防止悬挂指针。 – 2015-01-21 05:00:52

相关问题