C/C++ 的应用知识。
让我们首先了解为什么 Rust 在 C/C++ 的世界中对性能关键型应用程序和系统软件开发有意义。
随着时间的推移,我将指出我作为 C/C++ 程序员面临的一些注意事项。
不检查数组索引的 边界导致缓冲区溢出。
# include <stdio.h> # include <stdlib.h> # include <string.h> int check_authentication ( char *password) { int auth_flag = 0 ; char password_buffer[ 16 ]; strcpy (password_buffer, 密码); if ( strcmp (password_buffer, "brillig" ) == 0 ) auth_flag = 1 ; if ( strcmp (password_buffer, "outgrabe" ) == 0 ) auth_flag = 1 ; 返回auth_flag; } int main ( int argc, char *argv[]) { if (argc < 2 ) { printf ( "Usage: %s <password>/n" , argv[ 0 ]); 退出(0); } if (check_authentication(argv[ 1 ])) { printf ( "/n-=-=-=-=-=-=-=-=-=-=-=-=-=-/n" ); printf ( " 访问被授予。/n" ); printf ( "-=-=-=-=-=-=-=-=-=-=-=-=-=-/n"); } else { printf ( "/n访问被拒绝。/n" ); } } //代码来源:黑客:剥削的艺术,第 2 版
很容易产生严重的运行时错误,这些错误会使程序停止,例如“分段错误”——。
内存泄漏
由于 C/C++ 程序没有自动释放动态分配内存的内存管理例程,程序员需要通过手动释放内存来确保它已被释放。我们是程序员,我们确实会忘记释放内存,或者有时我们不了解应用程序的逻辑,不可避免地会将内存留在内存池中,而这些内存是程序无法访问的。这种情况称为内存泄漏。当它是一个需要像 Web 服务器一样全天候 24/7 运行的高可用性守护程序时,情况会变得更糟。
数据竞赛
很多时候在编写并发模块时,我们最终会由于数据竞争而导致结果不一致。~~C++ 标准还定义了术语数据竞争,表示由于对单个对象的并发修改而出现的特定类型的竞争条件。~~ C++ 并发实战
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293855.html