有多少bug可以重来

那些尝试过的bug、


bug 1:   malloc(sizeof(1024))      

why always segmentation fault?

本着分配1024字节空间的伟大使命,使用这条命令,sizeof(1024),真的不是sizeof(int)的意思吗。。


bug 2:  宏=请加括号!

#define min(a,b) (a)<(b)?(a):(b)
#define max(a,b) (a)>(b)?(a):(b)

int intheline(point a,point b,point c) {
	if (a.x>=min(b.x,c.x) && a.x<=max(b.x,c.x) &&
		a.y>=min(b.y,c.y) && a.y<=max(b.y,c.y)) {
		printf("a.y=> %f\n",a.y);
		printf("b.y=> %f\n",min(b.y,c.y));
		printf("c.y=> %f\n",max(b.y,c.y));
		return 1;
	}
	return 0;
}

/* output */

a.y=> 0.000000
b.y=> 1.000000
c.y=> 2.000000

我当时就震惊了! 0竟然比1大? 为什么!!

等我细细回味之时,宏拓展之后、一切都明了了

要么利用临时变量储存值,在进行比较,或者直接将min定义为 ((a)<(b)?(a):(b))  到处是陷阱啊!!


bug3: 如果你在c里,请先声明!

/*print_float.c*/
#include <stdio.h>
void print_float(float f)
{
    printf("%f\n",f);
}

#include <stdio.h>    /*main.c*/

int main(void)
{
    float f = 22.2222;
    print_float(f);
    return 0;
}
MacOS> gcc main.c print_float.c -o main

MacOS>./main

MacOS>0.0000

输出是0.0000而不是22.2222,最好编译时用-Wall解决这种因为没有显式声明,参数float型被默认为是int的问题~       当然-Wall解决很多问题,加上它!


bug4:  强制转换时请注意括号!

char *buf = (char*)malloc(1024);
unsigned short *shortp = (unsigned short*) buf + 12;
unsigned short *shortp2 = (unsigned short*) (buf + 12);
将buf转换成unsigned short 时,忘记了加括号, 误以为shortp是shortp2,当强制转换后,加12,是以(unsigned short)为单位的... 结果访问了不对的数据

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值