struct A { int i; };
...
A *p = (A*) (8); // or A *p = 0;
p->i = 5; // Undefined Behavior according C/C++ standard
但是,实际上大多数系统会因此类代码而崩溃(段错误)。
这是否意味着所有此类架构/系统都对指针间接(即 p->
)进行隐藏检查以验证它是否正在访问错误的内存位置?
如果是,那么这意味着即使在完美工作的代码中,我们也要为那个额外检查付出代价,对吗?
最佳答案
一般不会有额外的隐藏检查,这只是使用虚拟内存的一个效果。
一些潜在的虚拟地址只是没有映射到物理内存,所以翻译像 8 这样的东西可能会失败。
关于c++ - 指针间接检查无效内存访问和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860340/