gpt4 book ai didi

rust - 为什么在堆栈中分配的值不会导致双自由指针?

转载 作者:行者123 更新时间:2023-12-05 09:02:17 25 4
gpt4 key购买 nike

请告诉我为什么在堆栈中分配值没有导致双自由指针?谢谢。

#[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);

最佳答案

您使用的不安全方法只是创建引用值的按位副本。当您使用 Box 执行此操作时, 这不好,但对于像你的 Value 这样的东西包含整数的结构,可以将副本设为 Drop整数没有副作用,而 dropBox访问全局分配器并更改状态。

如果您不理解我在此解释中使用的任何术语,请尝试搜索或在评论中提问。

关于rust - 为什么在堆栈中分配的值不会导致双自由指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71681279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com