2012-09-03 11 views
6

Ich experimentiere mit XCode und versuche, den Windows-Code von jemand anderem zu kompilieren.Warum bekomme ich "Verwendung von nicht deklarierten Bezeichner 'malloc'"?

Es ist das:

inline GMVariable(const char* a) { 
    unsigned int len = strlen(a); 
    char *data = (char*)(malloc(len+13)); 
    if(data==NULL) { 
    } 
    // Apparently the first two bytes are the code page (0xfde9 = UTF8) 
    // and the next two bytes are the number of bytes per character (1). 
    // But it also works if you just set it to 0, apparently. 
    // This is little-endian, so the two first bytes actually go last. 
    *(unsigned int*)(data) = 0x0001fde9; 
    // This is the reference count. I just set it to a high value 
    // so GM doesn't try to free the memory. 
    *(unsigned int*)(data+4) = 1000; 
    // Finally, the length of the string. 
    *(unsigned int*)(data+8) = len; 
    memcpy(data+12, a, len+1); 
    type = 1; 
    real = 0.0; 
    string = data+12; 
    padding = 0; 
} 

Dies in einer Header-Datei ist.

Er ruft mich auf

Verwendung von nicht deklarierter Bezeichner 'malloc'

Und auch für Strlen, Memcpy und kostenlos.

Was ist los? Entschuldigung, wenn dies schmerzhaft einfach ist, bin ich neu in C und C++

+1

Sie einschließlich stdlib.h? –

+0

@WillAyd Ich habe es gerade aufgenommen, und die Fehler kürzen sich jetzt auf nur strlen und memcpy. Danke, aber was ist mit diesen 2? –

Antwort

18

XCode sagt Ihnen, dass Sie etwas namens malloc verwenden, aber es hat keine Ahnung, was malloc ist. Der beste Weg, dies zu tun, ist die folgende, um Ihren Code hinzuzufügen:

#include <stdlib.h> // pulls in declaration of malloc, free 
#include <string.h> // pulls in declaration for strlen. 

In C und C++ Zeilen, die mit # sind Befehl an den Pre-Prozessor starten. In diesem Beispiel ruft der Befehl #include den vollständigen Inhalt einer anderen Datei auf. Es ist so, als ob Sie den Inhalt von stdlib.h selbst eingegeben hätten. Wenn Sie mit der rechten Maustaste auf die Zeile # include klicken und "go to definition" auswählen, öffnet XCode stdlib.h. Wenn Sie durch stdlib.h suchen finden Sie:

void *malloc(size_t); 

der der Compiler sagt, dass malloc ist eine Funktion, die Sie mit einem einzigen size_t Argument aufrufen können.

Sie können den Befehl "man" verwenden, um nach Headerdateien für andere Funktionen zu suchen.

+0

's/Definitionen/Deklarationen /'. –

+0

Sie haben Recht! Fest. – razeh

4

Bevor Sie diese Funktionen verwenden, sollten Sie die Header-Dateien, die ihren Prototyp bereitstellen.

für malloc & frei ist:

#include <stdlib.h> 

für Strlen und MEMCPY es ist:

#include <string.h> 

Sie erwähnen auch C++. Diese Funktionen stammen aus der C-Standardbibliothek. Um sich von C++ Code zu verwenden, die umfassen Linien wären:

#include <cstdlib> 
#include <cstring> 

Allerdings könnte man auch die Dinge anders in C++ tun und nicht diese verwenden.

Verwandte Themen