Warum erhalte ich jedes Mal eine Warnung, wenn ich malloc verwende?

Lesezeit: 2 Minuten

Benutzeravatar von Kredns
Kredns

Wenn ich benutze malloc in meinem Code:

int *x = malloc(sizeof(int));

Ich bekomme diese Warnung von gcc:

new.c:7: warning: implicit declaration of function ‘malloc’  
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’

Benutzeravatar von sepp2k
sepp2k

Sie müssen hinzufügen:

#include <stdlib.h>

Diese Datei enthält die Deklaration für die eingebaute Funktion malloc. Wenn Sie das nicht tun, denkt der Compiler, dass Sie Ihre eigene Funktion namens definieren möchten malloc und es warnt Sie, weil:

  1. Du deklarierst es nicht explizit und
  2. Es gibt bereits eine eingebaute Funktion mit diesem Namen, die eine andere Signatur als die implizit deklarierte hat (wenn eine Funktion implizit deklariert wird, wird davon ausgegangen, dass ihre Rückgabe- und Argumenttypen sind intdas nicht mit dem integrierten kompatibel ist mallocwas dauert size_t und gibt a zurück void*).

  • Terminologie nit: Es gibt keine eingebaute Funktion in C. malloc ist einfach eine Funktion aus der Standard-C-Bibliothek.

    – Jens

    13. Oktober 2012 um 14:55 Uhr

  • @Jens Ich sehe kein Problem darin, Standardbibliotheksfunktionen als eingebaut zu bezeichnen – und die gcc-Leute offenbar auch nicht, da in der Fehlermeldung auch das Wort “eingebaut” verwendet wurde (weshalb ich es getan habe).

    – sepp2k

    13. Oktober 2012 um 15:17 Uhr

  • @sepp2k Nun, ich tun ein Problem sehen. Die Verwendung ist nicht standardisiert. Compiler kann eingebaute Funktionen haben und gcc kann malloc eingebaut haben. Aber wie ich geschrieben habe, in Cgibt es keine eingebauten Funktionen.

    – Jens

    13. Oktober 2012 um 15:21 Uhr


Du hast es nicht getan #include <stdlib.h>.

andris Benutzeravatar
andri

Sie müssen die Header-Datei einschließen, die die Funktion deklariert, zum Beispiel:

#include <stdlib.h>

Wenn Sie diese Header-Datei nicht einbinden, ist die Funktion dem Compiler nicht bekannt. Es sieht es also als nicht deklariert an.

Benutzeravatar von Tim Williscroft
Tim Williscroft

Machen Sie es sich zur Gewohnheit, Ihre Funktionen in der Hilfe nachzuschlagen.

Die meiste Hilfe für C ist den Unix-Handbuchseiten nachempfunden.

Verwendung:

man malloc

liefert ziemlich brauchbare Ergebnisse.

Googeln man malloc wird dir zeigen was ich meine.

In Unix bekommt man auch Apropos für Dinge, die verwandt sind.

RobertS unterstützt den Benutzeravatar von Monica Cellio
RobertS unterstützt Monica Cellio

Neben den anderen sehr guten Antworten möchte ich einen kleinen Nitpick machen und etwas abdecken, was in den anderen Antworten noch nicht besprochen wird.


Wenn Sie bei Linux sind, verwenden malloc() in deinem Code,

Du eigentlich nicht müssen, zu … haben #include <stdlib.h>.

(Obwohl die Verwendung von stdlib.h ist sehr verbreitet und wahrscheinlich sollte jedes Nicht-Spielzeugprogramm es so oder so enthalten, da es eine breite Palette nützlicher C-Standardbibliotheksfunktionen und Makros bietet)

Du könntest auch #include <malloc.h> stattdessen.

Aber bitte beachten Sie, dass die Verwendung von malloc.h ist veraltet und macht Ihren Code nicht portierbar. Wenn Sie verwenden möchten malloc() Sie sollten immer und immer (außer aus ausdrücklichen Gründen, etwas anderes zu tun) #include <stdlib.h>.

Die Gründe warumwerden am besten in den Antworten auf diese Frage erklärt:

Unterschied zwischen und

1422190cookie-checkWarum erhalte ich jedes Mal eine Warnung, wenn ich malloc verwende?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy