Gast
2012-05-23, 13:15:05
Hi,
ich bin auf folgende Kuriosität gestoßen. Ich habe eine struct und ein Array aus Instanzen dieser struct:
typedef struct TableRow_S
{
char Name[8];
short Number;
} TableRow_T;
TableRow_T table [] = { {"Pferd", 35}, {"Kuh", 121}, {"Esel", 42} };
Die struct entspricht einer Tabellenzeile, bestehend aus einem String und einer Zahl, das Array steht für eine Tabelle aus mehreren Zeilen. So weit so gut.
Jetzt habe ich den Code mal mit Visual Studio 2010 durchdebuggt, und habe mit Erstaunen festgestellt, dass, wenn ich mir den Inhalt des Arrays anzeigen lasse, für das zweite und dritte Element Blödsinn angezeigt wird, nur für das erste Element ist die Anzeige korrekt. Ich habe mir dann mal die Adressen der drei Elemente angesehen und dabei festgestellt, dass die um jeweils 6 Bytes auseinanderlagen. Die korrekte Größe der struct liegt aber bei 10 Bytes (8 chars + 1 short zu 2 Bytes), so dass die Array-Elemente um 10 Bytes auseinanderliegen müssten.
Ich habe mir dann mal im Überwachungsfenster sizeof(TableRow_T) anzeigen lassen, das Ergebnis war korrekt 10. Jetzt kommt's: ich habe mir dann noch sizeof(TableRow_S) anzeigen lassen, und da war das Ergebnis 6! Ich frage mich, wie kommt der Debugger bloß auf die 6?
ich bin auf folgende Kuriosität gestoßen. Ich habe eine struct und ein Array aus Instanzen dieser struct:
typedef struct TableRow_S
{
char Name[8];
short Number;
} TableRow_T;
TableRow_T table [] = { {"Pferd", 35}, {"Kuh", 121}, {"Esel", 42} };
Die struct entspricht einer Tabellenzeile, bestehend aus einem String und einer Zahl, das Array steht für eine Tabelle aus mehreren Zeilen. So weit so gut.
Jetzt habe ich den Code mal mit Visual Studio 2010 durchdebuggt, und habe mit Erstaunen festgestellt, dass, wenn ich mir den Inhalt des Arrays anzeigen lasse, für das zweite und dritte Element Blödsinn angezeigt wird, nur für das erste Element ist die Anzeige korrekt. Ich habe mir dann mal die Adressen der drei Elemente angesehen und dabei festgestellt, dass die um jeweils 6 Bytes auseinanderlagen. Die korrekte Größe der struct liegt aber bei 10 Bytes (8 chars + 1 short zu 2 Bytes), so dass die Array-Elemente um 10 Bytes auseinanderliegen müssten.
Ich habe mir dann mal im Überwachungsfenster sizeof(TableRow_T) anzeigen lassen, das Ergebnis war korrekt 10. Jetzt kommt's: ich habe mir dann noch sizeof(TableRow_S) anzeigen lassen, und da war das Ergebnis 6! Ich frage mich, wie kommt der Debugger bloß auf die 6?