Czy są jakieś pułapki podczas używania znaków char * do pisania kodu wieloplatformowego, który zapewnia dostęp do pamięci?Jakieś pułapki używające char * zamiast void * podczas pisania kodu cross-platform?
AKTUALIZACJA: Na przykład, czy powinienem sprawdzić przed przesłaniem dereferencji char * do określonego typu (np. Int), jeśli adres jest wyrównany do rozmiaru tego typu? Czy niektóre architektury zwrócą dziwne wyniki w przypadku braku dostępu?
Pracuję nad podzielnikiem pamięci odtwarzania, aby lepiej zrozumieć, jak debugować problemy z pamięcią. Doszedłem do wniosku, że char * są lepsze ze względu na umiejętność robienia arytmetyki wskaźnikowej i dereferencji nad pustką *, czy to prawda? Czy następujące założenia są zawsze prawdziwe na różnych typowych platformach?
sizeof(char) == 1
sizeof(char*) == sizeof(void*)
sizeof(char*) == sizeof(size_t)
Jeśli nie usuniesz zabezpieczeń z instancji char, będziesz musiał rzucić zarówno "char *" i "void *" do dowolnego typu, na który wskazują. – Aesthete
Nie wiem, czy jest to "gwarantowane", ale z mojego doświadczenia pierwsze 2 powinny być bezpieczne. Ostatni...??. – vdbuilder