我有一个奇怪的行为,我无法理解......两块代码都是来自同一个程序...我只是评论一个或另一个...我转换写入字节数组中的字符串的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);
}
答案 0 :(得分:1)
这是段错误的代码
由于工作的代码和获得SIGSEGV
的代码之间没有真正的区别,我们必须得出结论,问题是其他地方。
不幸的是,您无法显示其余代码,因此我们无法告诉您在哪里查看。
如果您使用的是支持Valgrind或AddressSanitizer的系统,很可能其中一个工具会告诉您完全您的问题所在。