Forum: PC-Programmierung Probleme mit malloc


von Pete (Gast)


Lesenswert?

Hallo ich mit Microsoft Visual Studio Express 2008 C++ eine kleine 
Beispielapplikation geschrieben. Beim übersetzen erscheint folgende 
Fehlermeldung:
>>error C2440: '=': 'void *' kann nicht in 'data *' konvertiert werden
>>Konvertierung von 'void*' in Zeiger auf nicht-'void' erfordert eine explizite 
Typumwandlung

Programmauszug:
1
struct data
2
{
3
   int value;
4
   char buffer[20];
5
   struct data *next;      // Nachfolger
6
   struct data *previous;  // Vorgänger
7
};
8
9
struct data *stack_ptr;
10
11
int stackinit(void) 
12
{
13
   stack_ptr=malloc(sizeof(struct data));
14
   if(stack_ptr != NULL) 
15
   {
16
      return 1;
17
   }
18
   else
19
      return 0;
20
}

von Marius W. (mw1987)


Lesenswert?

Na ist doch ganz einfach.

Mach vor dein malloc einfach einen cast:
1
stack_ptr=(struct data *)malloc(sizeof(struct data));

MfG
Marius

von Pete (Gast)


Lesenswert?

Ok danke!

von Karl H. (kbuchegg)


Lesenswert?

Noch besser:

Wenn du C programmierst, benutze den C Compiler
Wenn du aber den C++ Compiler benutzt, dann schreib auch C++!

von tobi (Gast)


Lesenswert?

Falls ichs richtig in Erinnerung hab:

In C kann doch void* implizit in jeden Pointertyp gecastet werden, in 
C++ nicht.

Das würde dann doch heißen, dass der Code des TE als C++ Code übersetzt 
wird und nicht als C Code oder?

von Volker Z. (vza)


Lesenswert?

tobi schrieb:
> Das würde dann doch heißen, dass der Code des TE als C++ Code übersetzt
> wird und nicht als C Code oder?

Richtig.

In C++ nimmt man aber new.

von Klaus W. (mfgkw)


Lesenswert?

Das ist jetzt wieder etwas pauschal.
Wenn man sich sicher ist, daß man nur reservieren möchte und nicht
irgendwie intialisieren, kann man auch malloc() nehmen. So etwas
würde ich niemandem von vornherein verbieten.
Ob es hier Sinn macht, steht auf einem anderen Blatt.

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.