www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Matrix


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: A.K. (Gast)
Datum:

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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.