Forum: PC-Programmierung Struktur: Variablen + Array initialisieren


von Leo (Gast)


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.
1
typedef struct
2
{
3
  unsigned short  usID1;
4
  unsigned short  usID2;
5
  unsigned short  usSize;
6
  unsigned char   Data[100];
7
}T_DATEN, * PT_DATEN;
8
9
T_DATEN  tDaten;
10
11
12
void main(void)
13
{
14
 ....
15
 tDaten = (PT_DATEN)malloc(sizeof(T_DATEN),unsigned char);
16
 ...
17
}

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?

von Klaus W. (mfgkw)


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").

von Leo (Gast)


Lesenswert?

Warum ist der zweite Parameter von malloc Quark?

von Klaus W. (mfgkw)


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.

von Ampfing (Gast)


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

von Klaus W. (mfgkw)


Lesenswert?

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

Also Multi-Quark :-)

von Klaus (Gast)


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.

von Klaus W. (mfgkw)


Lesenswert?

doch: reservieren anlegen initialisieren

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
Noch kein Account? Hier anmelden.