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。
宏没有生存期、作用域之类的概念,而函数就有。