---变量--- 1、变量初期化 //误1:局部变量使用前未初始化 int i; printf("%d/n", i); //建议:变量声明同时初始化 int i = 0; printf("%d/n", i); //误2:类的成员变量使用前未初始化 class A { public: A(){}; //... private: int m_iPri; }; //建议:类的非static成员变量在构造函数初始化 class A { public: A(){m_iPri = 0;} //... private: int m_iPri; }; 2、变量类型 //误1:类型溢出 cEvent cEvent; //... int iTime = 45; //分--->微秒 iTime *= 60*1000*1000; cEvent.accept(iTime); //... //建议:计算时检查数据范围 #include "limits" #define TIME_OUT_MAX (INT_MAX/60/1000/1000) //... iTime = iTime > TIME_OUT_MAX ? TIME_OUT_MAX : iTime; //... /********************************************************/ 误2:不同类型之间的比较 float a = 3.14; printf("%d/n", a==3.14); // 0 //建议:转变为同类型进行比较,浮点类型的比较注意精度 float a = 3.14f; printf("%d/n", a == 3.14f); ---数组与容器--- 1、数组 //误1: int a[5]; a[5] = 10; //误2: //sample1.h int a[5]; //sample1.cpp void fun1() { a[5] = 0; } //建议:使用前下标范围检查 //sample1.h const int cstSize = 5; int a[cstSize]; //sample1.cpp void fun1() { for (int i = 0; i < cstSize; i++) { a[i] = i; } } 2、容器 //误1: void fun() { vector <int> vec; vec.append(0); int index = 1; int i = vec.at(index); } //建议1: void fun() { vector <int> vec; vec.append(0); int index = 1; if (index < vec.size()) // 注意 : index >= 0 { int i = vec.at(index); } } //误2:无效的解引用 int find(const vector<int>& vec, int iThreshold) { vector<int>::const_iterator it = vec.begin(); for (; it < vec.end(); it++) { if (*it > iThreshold) { break; } } return *it; } //建议2:注意无效的iterator操作 ---内存error--- //误1: class A { public: int fun(int i){ *m_p = i; }; private: int *m_p; } //建议1: class A { public: A(){ m_p = NULL; }; public: int fun(int i) { if (m_p) { *m_p = i; } else … }; private: int *m_p; } //误2: int *pA = new int; int *pB = pA; delete pB; pB = NULL; *pA = 10; delete pA; //建议2:谁分配由谁释放 int *pA = new int; int *pB = pA; *pA = 10; delete pA; //误3: int *pA = new int[10]; ... delete pA; //建议3: int *pA = new int[10]; ... delete [] pA;