Hallo,
Was bedeuten new char[256] und delete [] data;?
Der Operator
new reserviert Speicher für ein Objekt auf dem Heap und gibt einen Zeiger auf diesen Speicherbereich zurück. Der Operator
delete gibt diesen Speicherbereich wieder frei. Gleiches gilt für das Paar
new [] und
delete [], wobei diese Speicher für ein Array von Objekten reservieren bzw. freigeben. Lies dich am besten im C++-Buch deiner Wahl in das Kapitel über Speicherverwaltung ein, ohne Kenntnisse hierüber kommt man nämlich nicht weit.
Habe ich das richtig verstanden, dass outfile.write(data, 256) die ersten 256 Zeichen vom Array data ausgibt?
data ist genau genommen kein Array, sondern ein Zeiger.
outfile.write(data, 256) liest einen Block von 256 Bytes aus dem Speicher und schreibt diese in die Ausgabedatei. Wo dieser Block anfängt, gibt der übergebene Zeiger
data an.
Warum schreibst du int main(void) statt int main()?
Gute Frage
![Wink ;) ;)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f609.png)
Im Prinzip sollte es bei C++ egal sein, ob man mit
void explizit angibt, dass die Parameterliste leer ist, oder eben nicht. Bei reinem C wäre ich mir da allerdings nicht so sicher.
Nochwas: Kann ich auch outfile.write("BM", 2); schreiben?
Klar, spricht nichts dagegen.
oufile.put(255) funktioniert bei mir nicht.
Bei mir klappt es schon. Von daher hab ich keine Ahnung, was da bei dir schief läuft.
Ich hab jetzt mal ein ganz anderes Problem: Ich habe in dem Programm ein Array:
Code:
short pascal[2050][1024];
Der Compiler gibt weder eine Fehlermeldung noch eine Warnung aus, trotzdem stürzt das Programm ab.
Das liegt daran, dass hier versucht wird, knapp 4 MiB Stackspeicher zu reservieren. Ein derart großer Stack wäre ungewöhnlich, darum kommt es bei der Ausführung des Programms zu einer Ausnahme und dadurch zum Absturz. Größere Datenmengen gehören auch nicht auf den Stack, sondern auf den Heap. Dazu brauchst du die Operatoren
new [] und
delete [] (siehe oben).
Grüße,
Matthias