作者:
yayax (夜夜叉)
2014-08-26 20:29:52開發平台:
VS2013 on Win7 64bit
問題:
win32-Debug, win32-Release, x64-Debug 皆不會發生,
唯獨 x64-Release 會發生。
餵入的資料:
沒有
預期的正確結果:
AA00
錯誤結果:
0000
程式碼:
int main(int argc, char* argv[])
{
char data[] = "AA+";
char buffer[] = "0000";
const char* ptr = data;
const char* next = strchr(ptr, '+');
for (long i = 0; i < (next - ptr); ++i)
buffer[i] = data[i];
puts(buffer);
return 0;
}
補充說明:
已嘗試更新到 update 3,問題依舊。
相同的程式碼在 C++Builder XE6 上沒有問題。
請同事使用 VS2010 build x64-Release 似乎沒問題
(他是XP,編譯好丟到我電腦執行)。
毫無頭緒
(long)(next-ptr) 加個轉型就會進迴圈。
作者:
LPH66 (-6.2598534e+18f)
2014-08-26 23:27:00指標相減得到的值型態是 ptrdiff_t
你仔細看debug版的初始化pointer 不是0 是7fffffffrelease的話絕大多數都形態都會初始成bitwise 0誒等等 你不是這個問題,我搞錯了 請跳過 XD
作者: firose (guest也是也是也是也是也) 2014-08-26 23:42:00
我測試沒問題耶 Win7 x64 release
作者: LiloHuang (十年一刻) 2014-08-26 23:49:00
改一下編譯器設定 /FAcs 可輸出機器碼以及組語對照這種時候看組合語言或機器指令最清楚了...把輸出的 .cod 檔案內容跟 VC2010 的比較一下便知道
作者:
yayax (夜夜叉)
2014-08-27 19:40:00AntaresStar也是VS2013嗎? 我目前試2010 & 2008 都不會發生
VS2013 update 3, Win7 X64 SP1我用long跟long long都跑出下面那種code上面那組 cmp怎麼會是位址比距離 不對啊
作者: LiloHuang (十年一刻) 2014-08-27 21:52:00
VS Express 2013 Update 3 + Win 7 幫你測試後一切正常cl.exe 編譯器版號是 18.00.30723 for x64不妨開命令提示字元視窗,看看是用哪一個版本的 cl.exe感覺你的版號跟原始安裝後的版號一樣,並無套用到升級也許也可以看看是否有其他板友願意分享可運行的版號建議可再開啟VS視窗,選擇[工具]->[擴充功能和更新]再檢查一下是否有更新出現...
我的cl是18.00.30723 還真的不一樣所以看起來原po的版本說不定確實有bug XD
作者:
yayax (夜夜叉)
2014-08-27 23:54:00家裡的沒更新,公司的有。馬上來更個新等等..或許公司的也沒安裝成功...orz
作者: LiloHuang (十年一刻) 2014-08-28 00:37:00
既然家裡的編譯後的結果跟公司的一樣,然後家裡沒更新恐怕真的是還停留在原始版本 XD 靜候佳音囉 :)
作者:
yayax (夜夜叉)
2014-08-28 21:15:00囧 公司網路擋更新~ 要再等等了