Forum: Mikrocontroller und Digitale Elektronik Matrix


von Michael (Gast)


Lesenswert?

Hi Leute,
 gibtds es in C: "int**"? oder nur "int* Array[]"??
 wie kann ich Speicher dafür mit malloc allocieren? und
 speicher freigeben mit free?
 Danke

von peter dannegger (Gast)


Lesenswert?

Es gibt beides und oftmals wird auch der gleiche Code dafür generiert.

malloc nimmt man nur dann, wenn die Größe noch unbekannt ist, sonst
kostet es nur unnötig Zeit und Code.


Peter

von Michael (Gast)


Lesenswert?

habe gedacht, man nimmt malloc wenn die grösse bekannt ist!! die muß ich
ja eingeben!!
reicht dann: Array=malloc(..)? oder muß ich auch:
for(i=0;i<x;i++){
*Array=malloc(..);}???
mit free? muss ich für jeden Zeiger speicher frei machen oder reicht
free(Array)????
Gruß

von A.K. (Gast)


Lesenswert?

Irgendwann muss die Grösse bekannt sein. Fragt sich jedoch wann.
- Compile-Zeit: Array.
- Laufzeit: malloc.

von The Daz (Gast)


Lesenswert?

Natuerlich muss dir Groesse bekannt sein. Was Peter meinte, ist dass
malloc dann benutzt wird, wenn die Groesse erst zur Laufzeit errechnet
wird und nicht schon beim kompilieren bekannt ist.
Wenn du ein mehrdimensionales array von pointern auf integers anlegen
willst und die Groessen nicht bekannt sind musst du in einer Schleife
die arrays mit malloc anlegen und spaeter einzeln per free freigeben.

von Michael (Gast)


Lesenswert?

vielen Dank, noch eine Frage: was bedeutet unter Linux der Fehler:
"Segmentation fault"?? hat das was mit Speicher zu tun?

von A.K. (Gast)


Lesenswert?

Zugriff auf nicht definierten Speicherbereich, üblicherweise falscher
Wert vom Pointer.

von A.K. (Gast)


Lesenswert?

Apropos Array vs. malloc: Ich persönlich ziehe es vor, in Controllern
der hier üblichen Grössenordnung ausschliesslich statische Allokation
vorzunehmen, also per Array. Das hat den Charme, dass bei der
RAM-Belegung als einzige variable Grösse der Stack verbleibt. Die RAM
Grösse wiederum wird im Build angezeigt, man sieht sofort, wie weit das
RAM ausgelastet ist. Mit malloc sieht man das nicht.

Wird jedoch malloc verwendet, merkt man erst zur Laufzeit, ob es reicht
oder nicht. Bzw. man merkt es u.U. garnicht und das Programm  hängt,
startet neu, überschreibt Daten mit dem Stack oder macht sonstwelchen
Blödsinn.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.