请告诉我为什么没有导致在堆栈中分配值的双自由指针?谢谢。
#[test]
fn read_value_that_allocated_in_stack_is_no_problem() {
let origin = Value(1);
let copied = unsafe { std::ptr::read(&origin) };
assert_eq!(copied, Value(1));
assert_eq!(copied, origin);
}
/// test failed as expected: double free detected
#[test]
fn read_value_that_allocated_in_heap_will_result_in_double_free_problem() {
let origin = Box::new(Value(1));
let copied = unsafe { std::ptr::read(&origin) };
assert_eq!(copied, Box::new(Value(1)));
assert_eq!(copied, origin);
}
#[derive(Debug, PartialEq)]
struct Value<T>(T);
Run Code Online (Sandbox Code Playgroud)
小智 5
您使用的不安全方法只是创建引用值的按位副本。当您使用 a 执行此操作时Box,这是不行的,但对于Value包含整数的结构之类的东西,可以使整数的副本在of访问全局分配器并更改状态Drop时没有副作用。dropBox
如果您不明白我在解释中使用的任何术语,请尝试搜索或在评论中提问。
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |