mikrocontroller.net

Forum: PC-Programmierung Struktur: Variablen + Array initialisieren


Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ich in meinem C Programm eine definierte Struktur die sämtliche 
Variablen sowie ein Array enthält Speicher reservieren/anlegen und 
anschließend die Variablen bzw. das Array mit "0" initialisieren.
typedef struct
{
  unsigned short  usID1;
  unsigned short  usID2;
  unsigned short  usSize;
  unsigned char   Data[100];
}T_DATEN, * PT_DATEN;

T_DATEN  tDaten;


void main(void)
{
 ....
 tDaten = (PT_DATEN)malloc(sizeof(T_DATEN),unsigned char);
 ...
}

Mit malloc wird ein Speicher nun reserviert. Wird dabei auch jede 
Vafriable bzw. das Array mit Null initialisiert? Wenn nein müsste ich 
dann noch die Funktion memset verwenden?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
malloc() initalisiert nicht den Speicher, sondern reserviert nur.

Dazu entweder memset() verwenden, oder gleich calloc() nehmen.
Das reserviert und löscht.

Dein Aufruf von malloc() ist übrigens Quark (konkret das ",unsigned 
char").

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum ist der zweite Parameter von malloc Quark?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erstens weil unsigned char ein Datentyp ist und damit als Parameter
einer Funktion maximal untauglich ist, und zweitens weil malloc() nur
einen Parameter bekommt.

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Du brauchst in diesem Fall weder ein malloc noch ein calloc noch sonst 
eine Speicherallokation.
Du hast eine globale Variable vom Typ struct und keinen Zeiger. Warum 
also Speicher anfordern?
Tatsächlich kannst Du Dich aber nicht darauf verlassen, dass in der 
Variablen alle Parameter mit 0 initialisiert werden.

Gruß

P.S.: malloc hat nur einen Parameter, deswegen ist der Zweite auch Quark

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, gar nicht gesehen; ich hatte unterstellt, er hätte einen Zeiger.

Also Multi-Quark :-)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leo schrieb:
> ich in meinem C Programm eine definierte Struktur die sämtliche
> Variablen sowie ein Array enthält Speicher reservieren/anlegen und
> anschließend die Variablen bzw. das Array mit "0" initialisieren.

Dieser Satz kein Verb.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch: reservieren anlegen initialisieren

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.