[C/C++] 常见错误汇总(2)
来源:互联网 发布:注册域名几天可以交易 编辑:程序博客网 时间:2024/04/30 13:14
1 调用strtok,会修改你输入的参数。
我刚刚犯了一个错误,就是先调用了strtok,然后才检查字符串,结果没有按预期。
// 错误char buf[256] = "0,100";char* res = strtok( buf, ",;" );if( buf[0] == '0' && buf[1] == '\0' ) return -1;// 正确char buf[256] = "0,100";if( buf[0] == '0' && buf[1] == '\0' ) return -1;char* res = strtok( buf, ",;" );
2 调用一些win api的时候,#include <winbase.h>会提示很多未定义的错误,应该改为#include <windows.h>
3 use of parameter from containing function
这一般出现在函数内部定义了一些参数和一个类,然后在类内部使用了类外部的参数。可以通过在类内部定义引用,然后构造的时候传递进去解决。
4 使用一些模板函数忘记按引用传参
class X {public: //错误,x是临时变量,导致m_x指向一块废内存 //X( map<int, int> x ) : m_x(x) {} X( map<int, int> & x ) : m_x(x) {}public: map<int, int> & m_x;};
5 用一个数据块来给一个带有0数组的结构体使用,忘记placement new
struct A { A() { size = 0; } size_t size; int objs[0];};char buf[MAX_BUFF_LEN];A* x = static_cast<A*>( buf );new ( static_cast<void*>( x ) ) A(); // 如果漏了这句,那A的构造函数就不会执行。
6 在有虚表类的构造函数里面调用了memset,导致vtable被改写。要谨记,继承虚函数的类除了类成员本身,还有虚表。
#include <stdio.h>#include <string.h>class B;struct TT { int a; char b; long c; void print( B& );};class A {public: virtual void print( TT* x ) = 0; virtual ~A() {}};class B : public A {public: B() { memset( this, 0, sizeof(*this) ); } virtual void print( TT* x ) { printf( "B %d %c %ld\n", x->a, x->b, x->c ); }};void TT::print( B& b ) { b.print( this );}int main() { TT y; B x; y.print( x ); return 0;}
7 用unsigned值判断小于0退出
因为unsigned值不可能小于0,所以成了死循环。
for( unsigned int i = 10; i >= 0; --i ) { some code here}但是也可以利用unsigned的这个性质简化判断
void fun( int i ) { if( i >= 0 && i < MAXT ) { some code here }}改为下面的代码:
void fun( int i ) { if( (unsigned int ) i < MAXT ) { some code here }}
- [C/C++] 常见错误汇总(2)
- [C/C++] 常见错误汇总(1)
- C语言常见错误分析汇总
- C语言常见错误分析汇总
- C/C++--常见错误
- c++OTL错误汇总
- [C/C++]常见错误积累
- c,vc常见错误
- C 常见错误
- c编译常见错误
- C语言常见错误
- C语言:常见错误
- 常见C调试错误
- 【C语言】常见错误
- c语言常见错误
- C语言常见错误
- C语言常见错误
- c常见错误汇集
- iOS设计模式——Category
- 隐藏html元素
- FCK编辑器 通过按钮控制文本框长度
- 如何在企業網路內成功使用 ubuntu 的 apt-get install (Proxy 設定)
- 目标跟踪综述
- [C/C++] 常见错误汇总(2)
- IOS 视图切换 页面跳转
- android 完全退出程序
- 在hibernate+mysql:Field 'id' doesn't have a default value两种解决办法
- 十六周上机任务(字符串)
- [Error Fix] The transaction log for database 'DATABASENAME' is full
- glBlendFunc()的参数(转自CSDN)
- MonkeyRunner_Android view client的配置
- DEDECMS网站数据快速迁移、数据库备份和还原