C/C++ 常出现的错误点

来源:互联网 发布:mac win8截图 编辑:程序博客网 时间:2024/05/16 00:51

1. free(): invalid next size (fast): 0xb73004e8 ***

     这一般是属于内存使用错误造成的。有可能是malloc 或者new 内存时的长度,和真正使用指针指向长度时越办造成的。

     如 char *str = malloc(5);  memcpy(str, "helloworld", 11);     // free(str) 时便出错以上的错误

2.linux select 与windows 不一样,linux下使用一次select后,接下来不阻塞?

   打日志,调试后才知道,int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 

   其中的 timeout 被select 函数修改置0. 而windows是const struct timeval 作为参数则不会有此情况。 


3.以下两种出来的a值不一样,尽量少使用宏,特别是涉及修改到参数内容

#define SUM(a,b,c) { a=b+c; }

void sum(int a,int b,int c){
    a = c+b+1;
}


#define S(a) (a)*(a)

宏只是编译前简单替换代码内容,而函数真正产生代码。宏是编译期的,函数是运行期的;
宏不是实体,而函数是一个可寻址的实体;
宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。
宏没有生存期、作用域之类的概念,而函数就有。

原创粉丝点击