new[] - Speicherproblem

TJF

Grünschnabel
Hallo,

ich habe ein Problem mit der folgenden Speicherbelegung:

Code:
size_t size24, size32;
size_t count;
unsigned int position;
//...
FILE *infile, *outfile;
infile  = fopen(in_name,  "rb");
outfile = fopen(out_name, "wb");
fseek (infile , 0 , SEEK_END);
size24 = (ftell (infile)); // number of bytes
size32 = size24 * 4/3; 
 
//void *buf = calloc (size24,1); // bei grossen Dateien geht es nur damit... und dem nachherigen free(buf)

position = fseek (infile , 0 , SEEK_SET); 
unsigned char *buf24 = new unsigned char[size24]; // Problem: Größe******
//free(buf);
unsigned int *buffer = new unsigned int[size32];
 
count = fread(buf24, 3, size24, infile); // 3 bytes je Sample -> 24 Bits

Wenn das infile etwa bis zu 80 kb groß ist funktioniert der Puffer "buf24" (Zeile 15). Ist die Datei größer oder sehr groß, funktioniert "buf24" nicht mehr. Einwandfrei geht alles, wenn ich Zeile 12 (und 16) mit irgendeinem Puffernamen aktiviere. Allerdings verstehe ich nicht, warum. unsigned char bezieht sich ja auf die einzelnen Werte der size24 und nicht auf den Wert an sich...

Dank und Gruß
Thomas
 
Hallo,

was genau bedeutet "funktioniert 'buf24' nicht mehr" ? Wenn du allerdings size24-Blöcke mit je 3 Bytes liest, müsste die Speicherreservierung eigentlich eher so aussehen:
C++:
unsigned char *buf24 = new unsigned char[size24 * 3];
Gruß
MCoder
 
Hi.
was genau bedeutet "funktioniert 'buf24' nicht mehr" ? Wenn du allerdings size24-Blöcke mit je 3 Bytes liest, müsste die Speicherreservierung eigentlich eher so aussehen:
C++:
unsigned char *buf24 = new unsigned char[size24 * 3];
Was aber dann unmöglich ist, da die Datei nur size24 Bytes hergibt...

Gruß
 
Oh je ... Da war ich ja auf einem Auge völlig blind. Ich danke Euch vielmals!

Viele Grüße
Thomas
 
Zurück