2016-07-05 11 views
1

Ich habe ein seltsames Verhalten, das ich nicht verstehen kann ... beide Teile des Codes stammen aus dem gleichen Programm ... Ich bin nur den einen oder anderen kommentieren ... Ich konvertiere ein mAC-Adresse in einen String in einem Byte-Array geschrieben ... hier ist der Code, der funktioniert:Segmentierung Fehler für Schleife

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]); 

Und hier ist der Code, die Segfaults:

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

Wie man sehen kann ich nicht nach draußen zu gehen Grenzen ... kannst du mir bitte erklären, was falsch ist?

Vielen Dank

UPDATE:

Der vollständige Code ziemlich groß ist, sowieso "mac" kommt aus dem Aufruf des Verfahrens:

void compute(char *mac) 

und kommt vom Befehlszeile, es ist eine MAC-Adresse ohne die doppelten Punkte, wie "DEADDEADDEAD" und hier ist die Definition von hexToByte:

+8

Bitte zeigen Sie ein komplettes, kompilierbares Beispiel an. Dass der erste Codeblock ausgeführt wird, bedeutet nicht unbedingt, dass er korrekt ist. –

+2

Die beiden Codes sind gleichwertig. Vielleicht irgendwo ein undefiniertes Verhalten? –

+0

Können Sie vollständigen Code eingeben? – dazzieta

Antwort

1

Und hier ist der Code, der

Segfaults Da es keinen wirklichen Unterschied zwischen Code ist, und Code funktioniert, die SIGSEGV bekommt, müssen wir feststellen, dass das Problem ist, anderswo.

Leider können Sie den Rest des Codes nicht anzeigen. Daher können wir Ihnen auch nicht sagen, wo Sie suchen sollen.

Wenn Sie auf einem System sind, das Valgrind oder AddressSanitizer unterstützt, ist es sehr wahrscheinlich, dass eines der Tools Ihnen genau sagt, wo Ihr Problem liegt.

Verwandte Themen