C语言的小陷阱

1,变量声名的错误

踩坑时间(2019/5/13~2019/5/17)

char* str_header = NULL, str_body = NULL;

正确的应该是

char* str_header = NULL, *str_body = NULL;

这个错误让我遭受了一个运行时错误,给str_body分配一段堆内存,平安无事,再向内存中拷贝字符串,对内存的非法访问,程序就挂掉了

2,增加一个printf语句就会让你的程序运行正确?!

踩坑时间(2019/5/13~2019/5/17)
Of cause not!
从前听过一个同事说起他的一个遭遇,“我的程序只要添加一行输出语句就能正确运行了,要不就不行!太邪门啦!”
没有想到我也遇到了这个怪问题,事实证明人比计算机更容易犯错

const size_t payload_size = strlen(SEND_BODY) + strlen(SEND_HEADER_FMT) + 8; 
//...
send_data = (unsigned char*)malloc(payload_size);
payload_fmt = (unsigned char*)malloc(payload_size);
memset(send_data, 0, payload_size);
memset(payload_fmt, 0, payload_size);
strcpy((char*)payload_fmt, SEND_HEADER_FMT);
strcat((char*)payload_fmt, SEND_BODY);
data_len = sprintf((char*)send_data, (const char*)payload_fmt, service_uri,\
 ip, port, sizeof(SEND_BODY) - 1);
//大约在这里,我只有添加一行 sprinf(""); 才能得到正确的运行结果
data_len = sprintf((char*)send_data, (const char*)payload_fmt, service_uri,\
 ip, port, sizeof(SEND_BODY) - 1);

至于为什么添加一行prinf("");就能正确运行真是不知道了,但是根本的错误出现在第一行的payload_size写错,导致内存分配的不足和内存操作的错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值