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
Bug in g++, in Speicherverwaltung oder in meinem Kopf?
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
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ä
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