Malloc na Wincrapie i Linuxie

Malloc na Wincrapie i Linuxie
Sos BBq - Biki-Miki
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:jakieś zadupie w wielkopolsce
  • Postów:46
0

Siema,
Mam taki kod:

Kopiuj
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;
}
Kopiuj
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ć?

AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
3

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

Sos BBq - Biki-Miki
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:jakieś zadupie w wielkopolsce
  • Postów:46
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

AK
Elementarna nieporadność systematycznego rozwiązywania problemów a plucie na Windows. Czujesz się bardziej hackerem? Pewnie tak ...
OG
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 4 lata
  • Postów:71
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*.

Sos BBq - Biki-Miki
deklaracja jest na początku w table.c i zmiana kompilatora pomogła
Sensacyjny Sebastian
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 16 godzin
  • Postów:385
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++

edytowany 1x, ostatnio: Sensacyjny Sebastian

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.