Approuvé : Fortect
Au cours des dernières semaines, quelques lecteurs ont rencontré un code d’erreur avec un pointeur void complet, qui est utilisé pour les revers arithmétiques. Ce problème est dû à plusieurs facteurs. Nous allons maintenant nous en occuper.
Demandé
Visité 28000 fois
J’ai de l’expérience dans l’écriture et la lecture de registres entre crammap comme ceci :
// LIREretour 2 . ((volatile uint32_t *) (feuille de route + offset));// ÉCRIVEZ* ((volatile uint32_t *) (emplacement + décalage)) = valeur ;
Avertissement : indice comme "void *" utilisé présent dans les mathématiques [-Wpointer-arith]
Comment puis-je modifier le code réel qui supprime les avertissements ? J’utilise C++ et Linux.
jugé pour le 5 novembre 2014 à 11 h 04
1321
Pas la réponse que vous cherchez ? Faites défiler d’autres questions marquées avec des pointeurs C ++, un pointeur nul, une arithmétique de pointeur ou posez votre propre question.
Approuvé : Fortect
Fortect est l'outil de réparation de PC le plus populaire et le plus efficace au monde. Des millions de personnes lui font confiance pour assurer le fonctionnement rapide, fluide et sans erreur de leurs systèmes. Avec son interface utilisateur simple et son puissant moteur d'analyse, Fortect détecte et corrige rapidement un large éventail de problèmes Windows, de l'instabilité du système et des problèmes de sécurité à la gestion de la mémoire et aux goulots d'étranglement des performances.
Puisque void
est un pointeur valide vers un type identifié, vous ne pouvez pas effectuer d’arithmétique de pointeur car le compilateur exact ne connaît pas explicitement la taille liée à l’objet que la référence pointe à.
La meilleure façon de le faire est de vous aider à convertir map
en un type réel, qui faisait alors un octet de large, en plus de faire quelques calculs. Pour beaucoup d’entre eux, votre entreprise peut utiliser uint8_t
:
// LIREreturn * ((volatile uint32_t *) (((uint8_t *) map) + annuler));// ÉCRIVEZ* ((volatile uint32_t *) (((uint8_t *) map) + diminution)) = valeur ;
654
Répondu le 5 novembre 2014 à 11h34
56,6k
Le type void est en fait un type incomplet. Sa taille est inconnue. Alors montrez que les calculs avec les indices vers le vide n’ont pas vraiment de sens. Vous avez besoin de lancer un pointeur qui est renvoyé sous forme vide vers un pointeur d’un modèle différent. Un exemple de pointeur peut être ready char.Notez également que les clients ne sont pas autorisés à vous aider à affecter un objet déclaré à l’aide du qualificatif risqué.
ont répondu 14 novembre à 11:14
231 000
Si tout le moyen d’utiliser l’arithmétique pour les recommandations nulles est maintenant vraiment ce dont vous avez besoin, puisque le calcul est possible grâce à GCC (voir Arithmétique pour les astuces nulles et les pointeurs de fonction), vous pouvez utiliser -Wno-pointer- arith <. utilisez / code> pour supprimer le mot d'avertissement.
a répondu au 21 janvier 15 à 11:20
164
Accélérez les performances de votre ordinateur dès maintenant avec ce simple téléchargement.