Rust实现结构体Default trait调用Default::default()报EXC_BAD_ACCESS错误
问题根因
栈溢出由Default trait实现的无限递归导致:
你在Configuration的default()方法中使用结构体更新语法..Default::default()时,Rust编译器会根据当前正在构造的结构体类型,自动推断Default::default()的调用目标为<Configuration as Default>::default(),也就是你正在实现的这个方法本身。递归没有任何终止条件,会持续消耗栈空间直到溢出,最终触发EXC_BAD_ACCESS错误。
修复方案
你需要手动为剩余字段指定默认值,避免调用自身的default()方法:
impl Default for Configuration { fn default() -> Self { Configuration { user: String::default(), password: Option::default(), dbname: Option::default(), hostaddr: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 5432), authentication_type: AuthenticationType::Trust, } } }
上述代码中直接使用字段对应类型的默认实现:String默认是空字符串,Option<T>默认是None,完全符合常规使用场景。
内容的提问来源于stack exchange,提问作者ruipacheco
相关产品推荐
相关产品推荐

