Che*_*ery -1 c++ stack pointers
AFAIK,在堆栈上声明的变量只在当前范围结束之前有效,所以基本上直到下一个}出现。但是,让我们以这个例子为例:
int main() {
int* ptrOne;
{
int intOne = 1;
ptrOne = &intOne;
}
int intTwo = 9;
std::cout << *ptrOne;
}
Run Code Online (Sandbox Code Playgroud)
当intTwo被宣布,intOne已经超出了范围。它不再可访问,因此应该被覆盖。但是,cout仍然有效并推出1. 在内存视图中,我可以看到 1 仍然存在,而 9 在其后面写入了几个字节。为什么?(我使用的是带有 MSVC 的 Visual Studio 2019)
它不再可访问,因此应该被覆盖。
不正确,正确的说法是it is no longer accessible and so the program has undefined behaviour。您无法对具有未定义行为的程序进行推理,它们可以做自己喜欢的事情。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |