例如,考虑变量声明:string* a
,如果我这样做std::cout << *a
,那么程序可能会崩溃吗?我在想指针a
指向的内存可能是一个糟糕的内存。如果是,什么是“坏记忆”?
问问题
123 次
3 回答
3
不一定会崩溃。例如,指针引用的内存最终可能位于您的程序有权读取的内存页面中。在这种情况下,程序不会通过segfault直接崩溃,这就是为什么你称它为“坏内存”或“垃圾内存”。它最终可能会打印乱码,具体取决于空终止符的接近程度,但它基本上是未定义的行为。
于 2013-11-01T22:45:43.300 回答
1
如果你只声明指针而不初始化它,那么它的地址可以包含任意值。通常,这意味着它要么根本不是有效地址,要么是您的程序不允许读取和/或写入的地址。尝试取消引用此类指针可能是非法操作,因此通常您的程序会崩溃,并且操作系统会报告访问冲突或类似情况。
理论上,指针也可能以您的程序可以访问的有效地址结束。不过,它几乎肯定不会包含有意义的数据,因此您通过它访问的任何内容都是无稽之谈。
于 2013-11-01T22:51:36.843 回答
1
is the program possible crash?
-> 是的,如果 a 没有引用您的进程允许的内存,它应该会出现段错误。
于 2013-11-01T22:42:10.837 回答