Du bist nicht angemeldet.

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

10.04.2016, 18:30

C | Malloc erzeugt eine Compiler Warnung

Hi,
ich habe die Aufgabe bekommen eine Warteschlange in C zu implementieren.
Alles kompiliert und scheint zu funktionieren, bis auf die Tatsache,
dass ich ständig eine Warnung bekomme, die ich nicht wirklich interpretieren kann.
  • "Typumwandlung": Konvertierung von "int" in größeren Typ "Node_t *"
  • "Typumwandlung": Konvertierung von "int" in größeren Typ "Queue_t *"

In den Codezeilen, die vom Compiler "markiert" werden, steht immer etwas wie:

C-/C++-Quelltext

1
2
3
Node_t* pNode       = (Node_t*) malloc(sizeof(Node_t));
// bzw.
Queue_t* pQueue     = (Queue_t*) malloc(sizeof(Queue_t));


Was verursacht die Warnung und was kann ich dagegen machen?

LG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

2

10.04.2016, 18:41

Welchen compiler benutzt du?

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

10.04.2016, 18:44

Visual Studio 2015 Community (64-bit).
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

4

10.04.2016, 18:45

Den Rückgabewert von malloc brauchst du nicht casten. Ansonsten, soweit ich das sehe, steht in den 3 Zeilen nichts, was warnen könnte.

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

5

10.04.2016, 18:50

I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

6

10.04.2016, 18:53

Weiß nicht warum der Compiler was von int brabbelt. Meines wissens nach gibt malloc einen void pointer zurück. Welche Nummer hat die Warnung.

7

10.04.2016, 18:54

Ach ja, C wie es leibt und lebt.
malloc ist nicht deklariert und der Compiler geht dann von int als Rückgabetyp aus, oder so ähnlich.

Nimelrian

Alter Hase

Beiträge: 1 260

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

8

10.04.2016, 19:01

In der Tat ist die int-Warnung merkwürdig. Generell sollte man bei malloc aber auch nicht casten.

Zitat

  • It is unnecessary, as void * is automatically and safely promoted to any other pointer type in this case.
  • It can hide an error, if you forgot to include <stdlib.h>. This can cause crashes (or, worse, not cause a crash until way later in some totally different part of the code). Consider what happens if pointers and integers are differently sized; then you're hiding a warning by casting and might lose bits of your returned address.
  • It adds clutter to the code, casts are not very easy to read (especially if the pointer type is long).
  • It makes you repeat yourself, which is generally bad.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

9

10.04.2016, 19:05

Hab lange nichts mehr mit C gemacht.
Warum kommt kein Linkerfehler wenn man include <stdlib.h> vergisst?

10

10.04.2016, 19:06

Das Problem hier ist, dass MSVC ein C++-Compiler ist und Standard-C eher schlecht unterstützt. Ich würde empfehlen auf einen anderen Compiler zu wechseln, beispielsweise gcc (Cygwin or MinGW).
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Werbeanzeige