例如,考虑变量声明:string* a
,如果我std::cout << *a
,那么程序是否可能崩溃?我认为指针a
的内存指向可能是一个糟糕的内存。如果是,那么“记忆力差”是什么?
答案 0 :(得分:3)
它不一定会崩溃。例如,指针引用的内存最终可能位于程序有权读取的内存页中。在这种情况下,程序不会通过segfault直接崩溃,这就是你称之为“坏内存”或“垃圾内存”的原因。根据空终止符的接近程度,它最终可能会打印出乱码,但它基本上是未定义的行为。
答案 1 :(得分:1)
is the program possible crash?
- &gt;是的,应该段错误,如果a没有引用允许进程的内存。
答案 2 :(得分:1)
如果只声明指针并且从不初始化它,那么它的地址可以包含任意值。通常,这意味着它根本不是有效地址,或者它是您的程序不允许读取和/或写入的地址。尝试取消引用此类指针可能是非法操作,因此通常您的程序将崩溃,操作系统将报告访问冲突或类似情况。
理论上,指针也可能以程序可以访问的有效地址结束。它几乎肯定不会包含有意义的数据,所以你通过它访问的任何东西都是无稽之谈。