www.mikrocontroller.net

Forum: PC-Programmierung Probleme mit malloc


Autor: Pete (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
struct data
{
   int value;
   char buffer[20];
   struct data *next;      // Nachfolger
   struct data *previous;  // Vorgänger
};

struct data *stack_ptr;

int stackinit(void) 
{
   stack_ptr=malloc(sizeof(struct data));
   if(stack_ptr != NULL) 
   {
      return 1;
   }
   else
      return 0;
}

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ist doch ganz einfach.

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

MfG
Marius

Autor: Pete (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch besser:

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

Autor: tobi (Gast)
Datum:

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

Autor: Volker Zabe (vza)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

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.