浏览代码

Fixed strict-aliasing violation in FormatTextureIDForDebugDisplay(). (#7090, #7256)

ocornut 1 年之前
父节点
当前提交
81e0be856a
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      imgui.cpp

+ 4 - 2
imgui.cpp

@@ -14787,10 +14787,12 @@ void ImGui::DebugNodeColumns(ImGuiOldColumns* columns)
 
 
 static void FormatTextureIDForDebugDisplay(char* buf, int buf_size, ImTextureID tex_id)
 static void FormatTextureIDForDebugDisplay(char* buf, int buf_size, ImTextureID tex_id)
 {
 {
+    union { void* ptr; int integer; } tex_id_opaque;
+    memcpy(&tex_id_opaque, &tex_id, ImMin(sizeof(void*), sizeof(tex_id)));
     if (sizeof(tex_id) >= sizeof(void*))
     if (sizeof(tex_id) >= sizeof(void*))
-        ImFormatString(buf, buf_size, "0x%p", (void*)*(intptr_t*)(void*)&tex_id);
+        ImFormatString(buf, buf_size, "0x%p", tex_id_opaque.ptr);
     else
     else
-        ImFormatString(buf, buf_size, "0x%04X", *(int*)(void*)&tex_id);
+        ImFormatString(buf, buf_size, "0x%04X", tex_id_opaque.integer);
 }
 }
 
 
 // [DEBUG] Display contents of ImDrawList
 // [DEBUG] Display contents of ImDrawList