Frage von JutenMorgen, 4

Hallo Leute ich hab eine Frage bezüglich einer Hausübung C/C++?

Siehe Aufgabenstellung im Bild...

Ich habe das ganze natürlich in ein Miniprogramm implementiert und geschaut, was ich returned kriege. Unter C ist es 0x0 und unter C++ eine ganz normale Speicherreservierung, sprich ich kriege einen Pointer zugewiesen. Um ganz ehrlich zu sein verstehe ich nicht was der Parameter (3U1024U1024U*1024U) macht und weiss somit nicht, welche der drei Antworten nun richtig ist. Ich hoffe mir kann hier jemand von euch weiter helfen.

Liebe Grüße, JutenMorgen!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von regex9, 4

Das U hinter der Zahl ist ein Literal für Ganzzahlen ohne Vorzeichen. Als Argument an malloc wird hier ein Produkt übergeben.

Kommentar von JutenMorgen ,

Heisst das ich reserviere einen Speicher für unsigned int 3*1024*1024*1024 = 3221225472?

Das passt doch in einen UINT rein? Also sollte es keinen Fehler geben und somit einfach nur Speicher an einer mir unbekannten Stelle reserviert werden oder? 

Kommentar von DexterNemrod ,

Wenn es genug freien Speicher gibt, dann schon.

Kommentar von JutenMorgen ,

Gut und ein UINT hat 4 bytes und keine 500 Megabyte. Das ist irgendwie mehr als genug :D Wie kann ich denn jetzt auf eine der Lösungen kommen? Ich verstehs nicht -.-

Kommentar von regex9 ,

malloc reserviert so viele Bytes. Wenn ich 3221225472B umrechne, komme ich ungefähr auf 3.2 GB. Da so viel Speicher nicht mehr vorhanden ist, dürfte ein null-Pointer zurückgegeben werden.

Kommentar von JutenMorgen ,

Achsooooooooo der reserviert nicht in der Größe des Integers sondern in der Zahl, welche dort steht als bytes. Hab ichs jetzt? Wenn ja dann Tausend dank!!! 

Kommentar von regex9 ,
Kommentar von RakonDark ,

genau , malloc reserviert für die anzahl an bytes , das U soll nur sagen das es eine ganz Zahl ist und soll dich verwirren ;)

deswegen gibt es meist im malloc zum besseren lesen 2 werte , einer nennt die Anzahl der andere die größe des Datentyps  also

INT z.b. 1 byte groß  , wir wollen 4 mal 1 byte

schreiben wir malloc (4 * 1)

wenn wir das noch ein bisschen verwirrender gestallten und U eine Einheit wäre dann wäre es U*U*U*U also U hoch 4 ;) Das wäre ja unsinn , genauso wie es keine kb² oder kb³ gibt ;)

Kommentar von JutenMorgen ,

Tausend dank euch dreien!!!

Antwort
von RakonDark, 3

wenn ich richtig rechne

1.073.741.824 byte = 1,074 GB > 515MB
3.221.225.472 byte = 3,221 GB > 1GB

somit gibt es NULL zurück , was wohl 0x00 sein soll , ergo

es konnte kein speicher bereitgestellt werden weil der speicher  in beiden Fällen zu klein ist .


Keine passende Antwort gefunden?

Fragen Sie die Community