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写错,导致内存分配的不足和内存操作的错误