C ++:取消引用指针

时间:2013-11-01 22:41:00

标签: c++ pointers memory

例如,考虑变量声明:string* a,如果我std::cout << *a,那么程序是否可能崩溃?我认为指针a的内存指向可能是一个糟糕的内存。如果是,那么“记忆力差”是什么?

3 个答案:

答案 0 :(得分:3)

它不一定会崩溃。例如,指针引用的内存最终可能位于程序有权读取的内存页中。在这种情况下,程序不会通过segfault直接崩溃,这就是你称之为“坏内存”或“垃圾内存”的原因。根据空终止符的接近程度,它最终可能会打印出乱码,但它基本上是未定义的行为。

答案 1 :(得分:1)

is the program possible crash? - &gt;是的,应该段错误,如果a没有引用允许进程的内存。

答案 2 :(得分:1)

如果只声明指针并且从不初始化它,那么它的地址可以包含任意值。通常,这意味着它根本不是有效地址,或者它是您的程序不允许读取和/或写入的地址。尝试取消引用此类指针可能是非法操作,因此通常您的程序将崩溃,操作系统将报告访问冲突或类似情况。

理论上,指针也可能以程序可以访问的有效地址结束。它几乎肯定不会包含有意义的数据,所以你通过它访问的任何东西都是无稽之谈。