1. 程式人生 > >Lua在Release版本下的一個bug

Lua在Release版本下的一個bug

最近將自己的UI工程在Release版下編譯,發現有部分控制元件的顏色居然偏黃,想必液晶也不至於老化的那麼厲害,隨機開始將工程加入除錯資訊進行跟蹤,排除UI工程,及自己寫的lua封裝問題,將問題縮小為:

lua程式碼:

t = {}

t.FillColor = 0xFFFFFFFF

foo( t )

在C++中註冊一個foo函式,然後獲取table t中的FillColor成員

發現取得的值居然為0x80000000

使用lua c api測試程式碼

lua_newtable( L );
lua_setglobal( L, "t");

lua_getglobal( L, "t");
lua_pushstring(L,"FillColor");
lua_pushinteger( L, 0xffffffff );
lua_pushinteger( L, -1 );
lua_settable( L, -3 );

lua_getglobal( L, "t");
lua_pushstring( L, "FillColor");
lua_gettable( L, -2 );
int t = lua_tointeger( L, -1 );

結果t也是0x80000000

然後將十六進位制的0xFFFFFFFF換成十進位制的4294967295,測試結果正確顯示-1

再使用幾個樣本測試

0xFF5F5F5F = 4284440415 會被改成0xFF5F5F00

這個bug倒是很好解決,將程式碼中的十六進位制數全換為10進位制即可。但是為什麼只在Release版本發生呢?

本人使用的是lua 5.1.4 原生