Bonjour ! Dans un de mes programmes , a un endroit (introduction hyper concise ), l'on utilise de l'arithmétique de pointeurs pour calculer une donnée en mémoire. L'expression de calcul , évaluée par le compilateur comme étant un uintptr_t , "disparait" lors du
reinterpret_cast<>() . L'expression semble être valide, quelques std::cout a l'appui , cepandant , la cast a l'air d'absorber cette expression , donnant lors d'un cout , rien , pas meme 0 ou un espace....(le compilo' ne lance pas le warning "statement has no effect" par ailleur
Le déréférencement de ces pointeurs vides montrent la valeur 0x00 , alors que l'addresse pointée par l'expression est remplie de 0xFF (le memory dump le confirme )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 std::cout << (VMA_DMA_buffer+(i*SIZE_OF_SPR_STRUCT)+(3*sizeof(uint16_t))+sizeof(uint8_t)) << '\n' // affiche bien une addresse mémoire valide, et cohérente par rapport aux calculs uint8_t* OffsetLargeur = reinterpret_cast<uint8_t *>(VMA_DMA_buffer+(i*SIZE_OF_SPR_STRUCT)+(3*sizeof(uint16_t))+sizeof(uint8_t)); //quelques autres calculs du même acabit, pour calculer d'autre pointeurs,"éffacés eux aussi" , OffsetLargeur n'y est pas impliqué std::cout << OffsetLargeur << '\n' // mis pour le debug , est vide....
(précision si nécessaire, l'expression calcule l'emplacement de la Largeur d'un sprite dans une memory pool (VMA_DMA_buffer) en fonction du tour de boucle (i) la taille de la structure (SIZE_OF_SPR_STRUCT), et leset le
Code : Sélectionner tout - Visualiser dans une fenêtre à part (3*sizeof(uint16_t))sont les autres membres de la "structure" a retrouver.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sizeof(uint8_t)
La question est donc : Pourquoi est-ce que ca se fait absorber dans le néant absolu , et auxiliairement comment résoudre ca ??
EDIT : le debugger avec les Watchs montrents aucun changement , commence a l'état "rien" et continue sur cet état, et cela , même en release
Partager