C++安全性

  • 格式:docx
  • 大小:13.38 KB
  • 文档页数:2

在c + + 语言中,支持数据类型的自动转换,自动数据类型转换使得两个数据类型互不兼容的变量可以相互赋值,不需给出显式说明,这有时会导致一些问题,最常见的是精度损失。

例如,如果把一个带符号的32 位整数赋给一个无符号整数,则所有的结果均为正数,不安全因素大大增加。

尤其是在处理精度要求较高的程序算法中,可能因为一个变量的定义导致整个程序算法的精度降低,而且还不容易被发现。

在C + + 语言中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数。

例如:int在IBM PC 上为16 位,在VA X -11 上就为32 位,导致了代码数据的不可移植。

而往往我们的程序不是在同样的PC下运行的,在做程序迁移的时候就会导致数据精度的损失。

从数据类型上来看。

c + + 一个很大的优点就是提供了指针的概念,使程序的效率得到了很大提高。

但是,这也是它的一个致命的缺陷。

由于指针使得程序员可以任意地对内存进行操作,很容易出现内存泄漏和非法操作等问题,而且通过指针对内存地址进行显式类型转换后,可以访问对象的私有成员,破坏了对象的安全性,会带来很大的安全隐患,造成不可预知的错误。

从全局变量上看。

在c + + 中,全局变量不加封装,往往会由于使用不当而造成系统的崩溃。

不加封装的全局变量,一方面影响了宝贵的全局空间,另一方面在开发程序过程中很容易乱用全局变量,在具体处理函数中,产生不可预知的错误。

原本对局部变量的修改,
导致全局空间的变量取值发生变化,影响其他函数的取值,轻者程序计算错误,严重的导致程序崩溃。

在c 语言中,程序员使用库函数malloc()和free()来分配和释放内存,c + + 语言中则是运算符new 和delete。

再次释放已经释放的内存块或者释放未被分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块会导致内存泄漏,以致最终耗尽内存资源。

c + + 语言中用结构和联合来表示一定的数据结构,但是由于其成员均为公有的,也就相当于数据成员是暴露的,可以对其进行读写操作,这样就带来了安全性问题。

数组问题,c++是不做下标检查的,在数组存在越界时程序不会向系统和用户抛出异常,用户往往很容易在此出现问题,造成数组越界问题,轻则得不到正确结果,严重的往往会导致程序运行崩溃。