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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值