Zatwierdzono: Fortect
W ciągu ostatnich kilku tygodni poszczególni czytelnicy napotkali kod błędu z jednym wskaźnikiem void, który jest używany do błędów arytmetycznych. Ten problem występuje z powodu kilku czynników. Teraz zajmiemy się nimi.
Zażądano
Odwiedzone 28000 razy
Mam doświadczenie w pisaniu i czytaniu rejestrów w crammapie w następujący sposób:
// CZYTAJpowrót 5 . ((volatile uint32_t *) (mapa drogowa + przesunięcie));// PISAĆ* ((volatile uint32_t *) (lokalizacja + przesunięcie)) = wartość;
Ostrzeżenie: wskazówka typu „void *” użyta w matematyce [-Wpointer-arith]
Jak zmienić kod, który blokuje ostrzeżenia? Używam C++ i Linuksa.
zapytano o 5 listopada 2014 o 11:04
1321
Nie odpowiedź, której szukasz? Przewiń inne pytania oznaczone wskaźnikami C ++, wskaźnikiem zerowym, arytmetyka wskaźników lub zadaj własne pytanie.
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Ponieważ void -
jest prawidłowym wskaźnikiem do nieznanego typu, nie można wykonać arytmetyki wskaźników, ponieważ kompilator nie zna jawnie rozmiaru obiektu, który punkty odniesienia.
Najlepszym sposobem na to jest pomoc w przekonwertowaniu mapy
na konkretny typ, który miał wówczas szerokość jednego bajta, a także wykonanie pewnych działań arytmetycznych. Dla wielu z nich możesz użyć uint8_t
:
// CZYTAJreturn * ((volatile uint32_t *) (((uint8_t *) mapa) + anuluj));// PISAĆ* ((volatile uint32_t *) (((uint8_t *) mapa) + spadek)) = wartość;
654
Odpowiedział 5 listopada 2014 r. 11:34
56,6k
Typ void jest z pewnością typem niekompletnym. Jego wielkość jest nieznana. Pokaż więc, że matematyka ze wskazówkami jako droga do próżni tak naprawdę nie ma sensu. Niezbędne jest rzucenie wskaźnika, który jest zwracany do rodzaju pustki, na wskaźnik innego zapisu. Przykładem wskaźnika może być char.Należy również zauważyć, że klienty nie są dozwolone, jeśli chcesz przypisać obiekt zadeklarowany przy użyciu kwalifikatora niestabilnego.
odpowiedział 14 listopada o godzinie 11:14
231 000
Jeśli obecnie sposób używania I arytmetyki dla zaleceń o wartości null może być naprawdę tym, czego potrzebujesz, ponieważ obliczenia są możliwe dzięki GCC (zobacz Arytmetyka dla wskazówek o wartości null i wskaźników do funkcji), możesz użyć -Wno-pointer-arith <. użyj / kod>, aby pominąć alerty.
odpowiedziałem 21 stycznia '15 o 11:20
164
Przyspiesz teraz wydajność swojego komputera dzięki temu prostemu pobieraniu.