Bug in g++, in Speicherverwaltung oder in meinem Kopf?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Hajoe
Beiträge: 82
Registriert: 28.03.2006 10:07:07

Bug in g++, in Speicherverwaltung oder in meinem Kopf?

Beitrag von Hajoe » 11.07.2006 18:25:01

Hallo,
bin auf ein seltsames Phänomen gestossen. Mein Code sieht so ähnlich aus:

struct sonstwas *etwas // ein element ist 16 Byte groß
char *buffer;

buffer = (char *) malloc (sizeof (struct sonstwas) * 1024);

for (i=0; i < 1024;i++)
memcpy (buffer + i * sizeof (struct sonstwas), &i,sizeof (int));

So jetzt sollte man doch meinen, dass nach folgender Operation

memcpy (&IntegerValue,buffer + x * sizeof (struct sonstwas),sizeof (int))

in IntegerValue der Wert drinsteht den ich vorher an die Stelle reingeschrieben habe. Das tut es auch, nur wenn x == 255 ist, dann steht da 256 drin, danach geht's wieder korrekt weiter bis x == 512, da steht dann 514 drin und so weiter. Er verschluckt also bei 255 komplett 16Byte. 255 X 16 sind 4096, fällt da jemand irgendwas auf? Ich benutze g++ 4.03 und Kernel 2.6

Hajoe
Beiträge: 82
Registriert: 28.03.2006 10:07:07

Korrektur

Beitrag von Hajoe » 11.07.2006 18:27:16

Sorry, 255 * 16 sind natürlich 4080, ich habe 256 * 16 gemeint

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 11.07.2006 19:00:38

Den Effekt finde ich irgendwie schon merkwürdig.

Was mir durch den Kopf ging:
ints sind doch "normalerweise" bei g++ und x86 32 bit gross - und du kopierst den da rum und liest dann aus wie wenns 16 bit wären? Der inkrement ist jeweils auch nur 16 bit.

Wobei irgendwie muss ich mich da auch verschätzt haben weil wenn das so ist wie ichs sage dann sollte der Output ein anderer sein.

Kannst du eventuell mal noch ein lauffähiges Testprogramm posten?

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Hajoe
Beiträge: 82
Registriert: 28.03.2006 10:07:07

Beitrag von Hajoe » 14.07.2006 13:26:19

Sorry, aber jetzt geht's auf einmal (keine Ahnung was da los war)

Antworten