Speicher allociieren
-
Hallo, Forum!
Ich möchte, wie die Überschrift schon sagt, Speicher mit malloc anfordern. Wenn ich das z. B. mit normalen char-Variablen mache, geht das so:char *buffer = NULL; char cVariable[y] buffer = (char*) malloc(sizeof(cVariable[x]));
wenn ich's jetzt richtig habe.
Aber nun will ich Speicher für Strukturen anfordern. Wie muß dann die malloc-Zeile lauten?struct Struktur { ... }struktur; buffer = (struct*)malloc(sizeof(struktur));
Ist diese Zeile richtig, oder muß ich für jedes Strukturelement einzeln anfordern?
-
Falsches Forum! Und ja sizeof ist richtig.
-
Dieser Thread wurde von Moderator/in CMatt aus dem Forum WinAPI in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich würde dir new und delete (C++) empfehlen, malloc (C) hat viele Nachteile...beispielsweise kann malloc IMHO maximal 64 Kbyte allokieren und die Angabe der zu reservierenden Bytes ist auch etwas tückisch...machs so:
**<<*** Beispiel: C-String *>>
1. Allokierung:
PTCHAR pszBuffer = NULL; pszBuffer = new TCHAR[200]; // pszBuffer kann nun 199 Zeichen und die Null-Terminierung aufnehmen
2. Verwendung:
lstrcpy(pszBuffer, TEXT("Ich werde kopiert.")); MessageBox(NULL, pszBuffer, NULL, 0);
3. De-Allokierung:
delete [] pszBuffer; pszBuffer = NULL;
**<<*** Beispiel: Strukturen *>>
1. Allokierung:
struct SData { int iValue; long lValue; }; SData* pData = NULL; pData = new SData; // SData ist nun ein Zeiger auf einen gültigen Speicherbereich // oder: // pData = new SData[10]; // SData ist nun ein Array mit 10 Elementen
2. Verwendung:
pData->iValue = 12; pData->lValue = 67563435L; // oder // pData[0].iValue = 213; // ...
3. De-Allokierung:
delete pData; pData = NULL; // oder: // delete [] pData // pData = NULL;
Du kannst bei new noch eine Exception vom Typ bad_alloc abfangen (try...catch), um
sicherzustellen, dass der Speicher auch korrekt initialisiert wurde. Ist aber i.d.R.
nicht üblich.PS: Was das soll: '...)malloc(sizeof(cVariable[x]));' kann ich nit nachvollziehen, sieht aber falsch aus...
.
-
beispielsweise kann malloc IMHO maximal 64 Kbyte allokieren
quatsch.
-
lool schrieb:
[...]quatsch.
http://www.cplusplus.com/ref/cstdlib/malloc.html schrieb:
Portability.
Defined in ANSI-C.
Some systems may apply restrictions on the maximum size for a memory block.
-
http://www.cplusplus.com/ref/cstdlib/malloc.html schrieb:
Portability.
Defined in ANSI-C.
Some systems may apply restrictions on the maximum size for a memory block.und jetzt werd dir klar, dass ein computer aus materie und nicht aus portability besteht.
-
Ach ne...trotzdem ist die Allokierung in C++ besser
.
-
weil new natürlich mehr speicher als malloc holen kann...
-
Wow, da hab ich ja ne richtige Expertendiskussion ausgelöst...
@CodeFinder
Danke für den Tip mit new...delete, ich glaube, den hast Du mir neulich schon mal gegeben. Mir ging es in diesem Fall mehr um das Verständnis.
Danke allseits.
-
CodeFinder schrieb:
Ach ne...trotzdem ist die Allokierung in C++ besser
.
auch quatsch!
DrGreenthumb schrieb:
weil new natürlich mehr speicher als malloc holen kann...
noch mehr quatsch.
oder habt ihr alle nur den ->
<- vergessen
-
net schrieb:
oder habt ihr alle nur den ->
<- vergessen
ja
-
nu is aber gut hier. new/delete gehoeren nach c++
und CodeFinder: mehr lesen, weniger schreiben.