专栏名称: CSDN
CSDN精彩内容每日推荐。我们关注IT产品研发背后的那些人、技术和故事。
目录
相关文章推荐
新浪科技  ·  【#小米回应YU7电池品牌##小米YU7电池 ... ·  16 小时前  
新浪科技  ·  【#ChatGPT欲挑战Siri市场地位## ... ·  昨天  
51好读  ›  专栏  ›  CSDN

用Rust解决C语言的隐患

CSDN  · 公众号  · 科技媒体  · 2017-01-05 09:40

正文

请到「今天看啥」查看全文



声名狼藉的程序分段错误(Segmentation Fault)是C语言的常见问题,而通常NULL dereferences是第一大诱因。如果开发者忘记了检查所返回的指针是否正确性,就可能会导致空指针引用。


uint8_t* pointer = (uint8_t*) malloc(SIZE); // Might return NULLfor(int i = 0 ; i 


  • 在Rust中


Rust处理这类指针错误的方式非常极端,在“安全”代码中粗暴简单地禁用所有裸指针。此外在“安全”代码中,Rust还取消了空值。


不过不用担心,Rust中存在一个优雅的替代方案——引用和借贷的方式。本质上来说,这些引用(references)还是那些老指针,但有了生命周期(Lifetimes)和借贷(Borrowing)规则,系统就能确保代码的安全性。


let my_var: u32 = 42;let my_ref: &u32 = &my_var; // 


释放内存后再使用(Use After Free)


这一弊端会产生严重的漏洞,导致黑客随意操控你的代码。


下面有一个样例:


uint8_t* pointer = (uint8_t*) malloc(SIZE);...if (err) {
  abort = 1;
  free(pointer);
}...if (abort) {
  logError("operation aborted before commit", pointer);
}


  • 在Rust中


像C++一样,Rust也使用资源获取即初始化(Resource Acquisition Is Initialization)的方式,这意味着每个变量在超出范围后都一定会被释放,因此在“安全的”Rust代码中,永远不必担心释放内存的事情。







请到「今天看啥」查看全文