我正在研究在Win32中構建並運行正常的應用程序。但是,在x64中,它會生成但運行崩潰。查看代碼並縮小問題的範圍,如果我註釋掉對以下函數的調用,它將毫無問題地運行。在x64中的程序崩潰,在Win32中正常工作
void vec3_copy (double* v1, const double* v2) {
v1[0] = v2[0]; v1[1] = v2[1]; v1[2] = v2[2];
}
我在Visual Studio 2008中用C/C++編譯器構建。所有更新都已安裝。有任何想法嗎?
EDIT 1(回答評論):
指針應該是有效的,如在WIN32,它運行良好。沒有代碼是改變,並且不採取不同的路徑,除非指針由於其x64(將查看此)而稍微修改。
不幸的是,沒有關於崩潰的信息。在Windows 7中,它只是表示它正在尋找問題的解決方案,什麼也找不到,並在命令提示符下返回。在事件查看器,我可以找到以下信息:
Faulting application name: DRR_C.exe, version: 0.0.0.0, time stamp: 0x4b7a1ee1
Faulting module name: DRR_C.exe, version: 0.0.0.0, time stamp: 0x4b7a1ee1
Exception code: 0xc0000005
Fault offset: 0x0000000000003950
Faulting process id: 0x16a4
Faulting application start time: 0x01caaec078a9c84a
Faulting application path: D:\Development\gpu\dev\DRR_C\x64\Debug\DRR_C.exe
Faulting module path: D:\Development\gpu\dev\DRR_C\x64\Debug\DRR_C.exe
EDIT 2(回答更多評論):
修改了行,
memcpy(v1, v2, 3 * sizeof(double));
新的錯誤信息有相同的異常代碼和故障偏移。
什麼樣的崩潰?該代碼看起來沒問題,只要你確定'v1'&'v2'是有效的指針... – 2010-02-16 04:27:24
任何錯誤消息? – 2010-02-16 04:27:36
該代碼很好。你的問題在調用鏈中的某處,導致'v1'和'v2'具有它們在調用失敗時的特定值(很可能在某些指針算術中隱含地假定了32位指針差異或類似情況)。除此之外,你應該使用'memcpy()'來處理這種事情。 – 2010-02-16 04:34:18