Matrix

Gast #326146
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
Gast #326147
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ß
Gast #326149
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.
Gast #326152
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren