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
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
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ß
Irgendwann muss die Grösse bekannt sein. Fragt sich jedoch wann. - Compile-Zeit: Array. - Laufzeit: malloc.
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.
vielen Dank, noch eine Frage: was bedeutet unter Linux der Fehler: "Segmentation fault"?? hat das was mit Speicher zu tun?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.