依赖反转,异常,auto_ptr,多态,STL容器,虚构造函数
(1) 栈上变量必须初始化 (2) 从堆上分配的内存必须初始化 (3) 栈上局部变量是否有大数组变量,导致栈超出默认限制溢出 (4) 栈中是否有不合理的递归,导致栈超出默认限制溢出 (5) 必须对内存耗尽的情况进行处理 (6) 释放某个指针后,必须将该指针变量赋值为NULL,避免野指针的出现 (7) 禁止对同一指针delete或者free两次或以上 (8) 对数组操作,必须强制确保下标不会越界 (9) 避免频繁的不等长小内存申请和释放 (10) 内存申请和释放必须配对,防止内存泄漏 (11) 析构数组类型必须使用[] delete形式 (12) free和malloc,delete和new 必须配对使用,不能混用 (13) 线程的使用也是占用了内存,是否考虑到了线程释放 (14) 对于覆盖标准的operator new和operator delete函数, 必须配对重写 (15) 对于内存长度,不能靠自己计算,必须使用sizeof和注意字节对齐 (16) 对于C字符串,是否考虑到字串末位的'/0'结束符,比如: char *p = "WoKao"; char buffer[5]; strpcy(buffer,p); (17) 使用strcpy(char *dest,const char *src)等str系列函数,是否考虑到了dest缓冲溢出的情况,应该优先确保dest不会溢出或者使用n族函数 (18) 使用int sprintf(char *string,char *farmat [,argument,...]);函数的时候是否考虑到了溢出,应该优先确保string不会溢出或者使用snprintf函数 (19) 使用fgets函数替代gets (20) mem族函数注意确保操作空间不会溢出 (21) 进行内存拷贝,赋值或者初始化的时候,尽量用mem函数族替代循环操作 (22) 小心指针和数组的区别,比如const char *p = "12345678",char buffer[] = "12345678"; cout<<sizeof(p)<<endl,cout<<sizeof(buffer)<<endl;等等 (23) 是否试图修改常量字符串,比如const char* p = "WoKao",p[0] ='R'; (24) 是否考虑数组名作为函数参数传递时,数组退化为指针。 (25) 注意避免大量临时对象的产生导致内存的急速消耗, 比如连续的很长的 string + 操作 (26) 注意避免对临时对象进行引用,比如 string a = "123"; string b = "456"; const char* p = (a + b).c_str(); (27) 在函数参数传递时,尽量使用指针或者引用,避免直接传值操作,特别是大对象类型 (28) 对于auto_ptr智能指针的使用,是否考虑到了所有权的转移,导致的内存释放 (29) 对于vector类,是否考虑到了其内部内存不足时,其自动扩展2倍内存机制,对程序运行是否有影响 (30) 在使用STL string类的时候,是否考虑了string类实现的多样性对程序的影响。 (31) 在某个模块,对象需要结束其生命周期的时候,是否释放了其对应的内存资源。比如C++的析构函数中是否delete了其对应的内存资源 (32) 小心共享内存上存放有vtable的对象,另外一个进程进行删除时,导致非法访问 (33) 不能够对含有vtable的对象进行memset初始化 (34) 计算结构变量偏移必须使用offsetof (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |