Malloc na Wincrapie i Linuxie

0

Siema,
Mam taki kod:

table.c

static void add_entry(uint8_t id, char* buf, int buf_len) {
    char* cpy = malloc(buf_len);

    memcpy(cpy, buf, buf_len);

    table[id].val = cpy;
    table[id].val_len = (uint16_t)buf_len;
}
table.h

struct table_value {
    char* val;
    uint16_t val_len;
};

Malloc ma jakiś problem, bo na Linuxie wszystko jakoś działa, a na Wincrapie nie bo nie można użyć wartości typu void* do zainicjowania jednostki typu char*
Ktoś mi to wyjaśni i powie jak to naprawić?

3

Jakie kompilatory na poszczególnych platformach? Zgaduję, że z jakiegoś powodu na Win kompilujesz to jako C++.

0
alagner napisał(a):

Zgaduję, że z jakiegoś powodu na Win kompilujesz to jako C++.

Tak! Ja zainstalowałem VS na windowsie. Teraz działa :D

1

Nie widzę deklaracji zmiennej table w tej funkcji, a jakbym miał strzelać to obstawiałbym że na windowsie używasz kompilatora c++ a na linuxie kompilatora c. C++ nie wspiera niejawnej konwersji z void*.

2
Sos BBq - Biki-Miki napisał(a):
alagner napisał(a):

Zgaduję, że z jakiegoś powodu na Win kompilujesz to jako C++.

Tak! Ja zainstalowałem VS na windowsie. Teraz działa :D

To ja tylko od siebie dopowiem - w C, legalnym jest przypisanie wartości typu void* do dowolnego innego typu wskaźnika. C++ natomiast wymaga już rzutowania.

EDIT: Dorzucam link do Wikipedii: https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B#Constructs_valid_in_C_but_not_in_C++

1 użytkowników online, w tym zalogowanych: 0, gości: 1