for循环中的分段错误

时间:2016-07-05 19:02:26

标签: c segmentation-fault

我有一个奇怪的行为,我无法理解......两块代码都是来自同一个程序...我只是评论一个或另一个...我转换写入字节数组中的字符串的mac地址...这里是有效的代码:

unsigned char ssidHex[6];
ssidHex[0] = hexToByte(mac[0], mac[1]);
ssidHex[1] = hexToByte(mac[2], mac[3]);
ssidHex[2] = hexToByte(mac[4], mac[5]);
ssidHex[3] = hexToByte(mac[6], mac[7]);
ssidHex[4] = hexToByte(mac[8], mac[9]);
ssidHex[5] = hexToByte(mac[10], mac[11]);

以下是段错误的代码:

unsigned char ssidHex[6];
for (int y = 0; y < 6; y++) 
  ssidHex[y] = hexToByte(mac[y * 2], mac[y * 2 + 1]);

正如你所看到的,我没有超越界限......你能否解释一下我的错误?

非常感谢

更新

完整的代码非常大,无论如何&#34; mac&#34;来自程序的召唤:

void compute(char *mac)

来自命令行,它是一个没有双点的mac地址,例如&#34; DEADDEADDEAD&#34;这里是hexToByte的定义:

unsigned char hexToByte(unsigned char buf1, unsigned char buf2) {
   unsigned char temp[5] = { '0', 'x', buf1, buf2, 0};  
   return strtol(temp, NULL, 0);
}

1 个答案:

答案 0 :(得分:1)

  

这是段错误的代码

由于工作的代码和获得SIGSEGV的代码之间没有真正的区别,我们必须得出结论,问题是其他地方

不幸的是,您无法显示其余代码,因此我们无法告诉您在哪里查看。

如果您使用的是支持Valgrind或AddressSanitizer的系统,很可能其中一个工具会告诉您完全您的问题所在。