【发布时间】:2012-09-11 10:53:09
【问题描述】:
以下代码在一个程序中运行良好,并且 导致另一个总线错误
char *temp1;
temp1=(char*)malloc(2);
for(b=3;b>=0;b--)
{
sprintf(temp1,"%02x",s_ip[b]);
string temp2(temp1);
temp.append(temp2);
}
s_ip[b] 是 byte 类型, temp 是一个字符串。是什么导致了这个总线错误,我该如何解决这个问题? 此外,这种奇怪行为的原因是什么?
【问题讨论】:
-
请注意,根据 s_ip[b] 中的实际值,这可能会比您预期的 2 位数还要多,因此您应该考虑使用 snprintf 增加一些安全性
-
@sjsam,
s_ip有 4 个元素吗? -
@sjsam,那么
s_ip的唯一有效索引是0和1,但发布的for循环将访问3, 2, 1, 0。将for循环更改为for (b = 1; b >= 0; b--) -
你试过调试吗? SIGBUS 应该会指出问题所在。
-
@rtlgrmpf :这似乎是件好事..