100个windows平台C++开发错误之十五指针

更多精彩内容,请见:http://www.16boke.com


by zxy,Java/C++编程交流群:168424095

(71)内存分配未成功,却使用了它。

在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。

(72) 使用未初始化的指针。

未初始化,因而指向的是无效地址的指针。

例如:  

int*p

*p=12;

指针p在声明时未初始化,指向的是一个随机的内存地址。它可能指向系统栈、全局变量、程序代码区或操作系统。执行*p=12;时程序会不加辨别地试图在p指向的随机位置处写入一个12。这时程序有可能立即崩溃,也可能等上半小时然后崩溃,或者程序另一个部分的数据被悄然破坏而您却浑然不知。可见这种错误非常难于排查。确保指针解引用取出指针指向的地址中的内容之前,所有的指针已被初始化为指向有效地址。

错误代码:

char *p;

strcpy(p,"hello world");

 

正确代码

char buf[1024];

char *p = buf;

strcpy(p ,"hello world");

(73) 避免数组或指针的下标越界。

(74) 动态内存的申请与释放必须配对,防止内存泄漏。

含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。

(75) freedelete释放了内存之后,立即将指针设置为NULL,防止产生野指针


更多精彩内容,请见:http://www.16boke.com

你可能感兴趣的:(100个windows平台C++开发错误之十五指针)