Ошибка сегментации для цикла

У меня странное поведение, я не могу понять... оба куска кода из одной и той же программы... Я просто комментирую один или другой... Я конвертирую 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]);

И вот код, который segfaults:

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

Как вы видите, я не выхожу за пределы... не могли бы вы объяснить мне, что не так?

большое спасибо

ОБНОВЛЕНИЕ:

Полный код довольно большой, в любом случае "mac" происходит от вызова процедуры:

void compute(char *mac)

и происходит из командной строки, это MAC-адрес без двойных точек, например, "DEADDEADDEAD" и вот определение 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 ответ

Решение

А вот код, который segfaults

Поскольку нет реальной разницы между кодом, который работает, и кодом, который получает SIGSEGV, мы должны сделать вывод, что проблема в другом.

К сожалению, вы не можете показать остальную часть кода, поэтому мы не можем сказать вам, где искать.

Если вы работаете в системе, которая поддерживает Valgrind или AddressSanitizer, очень вероятно, что один из инструментов точно скажет вам , где ваша проблема.

Другие вопросы по тегам