2012-09-03 23 views
6

XCode ile deneme yapıyorum ve bir başkasının Windows kodunu derlemeye çalışıyorum.Neden "Tanımlanamayan tanıtıcı 'malloc' kullanımı" alıyorum?

burası var:

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

Bu bir başlık dosyasında olduğunu.

Bu memcpy ve ücretsiz,

Ve ayrıca için strlen bildirilmemiş tanımlayıcı 'malloc' arasında

Kullanımına İlişkin beni çağırır.

Neler oluyor? Üzgünüz, bu çok basitse, C ve C++ için yeni yapıyorum

+1

stdlib.h dahil misiniz? –

+0

@WillAyd Ben sadece dahil ve hataları sadece strlen ve memcpy şimdi kısaltılmış. Teşekkürler, ama bu 2'ye ne dersin? –

cevap

18

XCode, malloc adlı bir şey kullandığınızı söylüyor ancak malloc'un ne olduğu hakkında hiçbir fikri yok. Bunu yapmanın en iyi yolu, kodu aşağıdaki eklemektir:

# ile başlar C ve C++ satırlarda
#include <stdlib.h> // pulls in declaration of malloc, free 
#include <string.h> // pulls in declaration for strlen. 

öncesi işlemciye komut bulunmaktadır. Bu örnekte, #include komutu başka bir dosyanın tam içeriğinde çeker. Stdlib.h içeriğine yazmışsınız gibi olacak. #include satırına sağ tıklayın ve "tanıma git" seçeneğini seçin. XCode stdlib.h dosyasını açacaktır. Eğer stdlib.h aracılığıyla ararsanız bulabilirsiniz: malloc tek bir size_t argüman ile arayabileceğiniz bir işlevdir derleyici söyler

void *malloc(size_t); 

.

Diğer işlevler için eklenecek hangi üstbilgi dosyalarını bulmak için "man" komutunu kullanabilirsiniz.

+0

's/tanımlar/bildirimler /'. –

+0

Haklısınız! Sabit. – razeh

4

Bu işlevleri kullanmadan önce, prototipini sağlayan başlık dosyalarını eklemelisiniz.

malloc & için ücretsiz olduğunu: strlen için

#include <stdlib.h> 

ve öyle memcpy:

#include <string.h> 

Ayrıca C söz ++. Bu fonksiyonlar C standart kütüphanesinden alınmıştır. C++ kodunda bunları kullanmak için hatları olurdu şunlardır:

#include <cstdlib> 
#include <cstring> 

Ancak, C farklı şeyler yapıyor iyi olabilir ++ ve bu kullanmıyor olması.

İlgili konular