原始指针的unsafe
方法.offset()
具有以下安全要求:
如果违反了以下任何条件,则结果为Undefined Behavior:
- 起始指针和结果指针都必须是either in bounds or one byte past,即同一分配对象的结尾.
- ...
我感到困惑的是,如果结果的原始指针指向所述边界之外,事情怎么可能出错.我的印象是,如果一个原始指针从未被取消引用,它总是安全的,无论如何,因为我可以创建一个原始指针在稀薄的空气中完全安全的语句:
let val = 42usize;
let ptr = val as *mut i32;
有没有任何例子表明创建一个通过.offset()
的野生指针会导致程序崩溃,而通过强制转换则不会?