Gast
#326145
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
|
Anzeige
|
Matrix
Gast
#326145
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
Gast
#326146
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
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
#326148
Irgendwann muss die Grösse bekannt sein. Fragt sich jedoch wann. - Compile-Zeit: Array. - Laufzeit: malloc.
Gast
#326149
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
#326150
vielen Dank, noch eine Frage: was bedeutet unter Linux der Fehler: "Segmentation fault"?? hat das was mit Speicher zu tun?
Gast
#326151
Zugriff auf nicht definierten Speicherbereich, üblicherweise falscher Wert vom Pointer.
Gast
#326152
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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|