繁体   English   中英

程序在x64中崩溃,在Win32中运行良好

[英]Program crash in x64, works fine in Win32

我正在开发一个在Win32中构建并运行良好的应用程序。 但是,在x64中,它会在运行时生成但崩溃。 查看代码并缩小问题范围,如果我注释掉对下面函数的调用,它运行没有问题。

void vec3_copy (double* v1, const double* v2) {
    v1[0] = v2[0]; v1[1] = v2[1]; v1[2] = v2[2];
}

我正在使用C / C ++编译器在Visual Studio 2008中构建。 已安装所有更新。 有任何想法吗?

编辑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

编辑2(回答更多评论):

将行修改为,

memcpy(v1, v2, 3 * sizeof(double));

新错误信息具有相同的异常代码和错误偏移。

它仍然与memcpy崩溃的事实证实坏指针的来源在其他地方,正如预期的那样。

申请有多大? 它看起来像沿线的某个地方,指针被截断为32位或以其他方式被破坏。 很可能您需要花一些时间与调试器一起追踪确切的位置。

首先想到的并且可能导致此崩溃的是从指针转换为int然后返回。 在Win32上,指针和int都是32位长,在Win64指针上可能是64位长,而int可能只有32位长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM