2012-09-03 23 views
6

Eksperymentuję z XCode i próbuję skompilować czyjś kod Windows.Dlaczego otrzymuję komunikat "Używanie niezadeklarowanego identyfikatora" malloc ""?

Jest to:

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; 
} 

Jest to w pliku nagłówka.

on nazywa mnie na

Zastosowanie nierejestrowanej identyfikatorze 'malloc'

A także dla strlen, memcpy i za darmo.

Co się dzieje? Przepraszam, jeśli to jest boleśnie proste, jestem nowy w C i C++

+1

czy włączysz stdlib.h? –

+0

@WillAyd Właśnie dodałem to, a błędy zostały skrócone do teraz tylko strlen i memcpy teraz. Dzięki, ale co z tymi 2? –

Odpowiedz

18

XCode mówi ci, że używasz czegoś, co nazywa się malloc, ale nie ma pojęcia, czym jest malloc. Najlepszym sposobem, aby to zrobić, aby dodać następujący kod:

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

w C i C++ linii, które zaczynają się od # są polecenia do wstępnego procesora. W tym przykładzie polecenie #include pobiera całą zawartość innego pliku. Będzie tak, jakbyś sam wpisał zawartość stdlib.h. Jeśli klikniesz prawym przyciskiem myszy na linię #include i wybierz "przejdź do definicji" XCode otworzy się stdlib.h. Jeśli przeszukiwać stdlib.h znajdziesz:

void *malloc(size_t); 

która informuje kompilator, że malloc jest funkcją można wywołać za pomocą jednego size_t argument.

Możesz użyć polecenia "man", aby znaleźć pliki nagłówkowe dla innych funkcji.

+0

's/definicje/deklaracje /'. –

+0

Masz rację! Naprawiony. – razeh

4

Przed użyciem tych funkcji należy dołączyć pliki nagłówkowe, które zapewniają ich prototyp.

dla malloc & darmo to:

#include <stdlib.h> 

dla strlen i memcpy jest:

#include <string.h> 

też wspomnieć C++. Te funkcje pochodzą ze standardowej biblioteki C. Aby z nich korzystać z kodu C++ include linie byłoby:

#include <cstdlib> 
#include <cstring> 

Jednak może dobrze robić rzeczy inaczej w C++ i nie używać tych.

Powiązane problemy