一点背景知识,我对 Java 比较有经验,并且有一些 C/C++ 经验。
我正在使用 Visual Studios 2010。
我在头文件中创建了两个类并给了它们字段。
它编译正常,并且在最长的时间内运行良好。
我将整个项目目录复制到一个新文件夹(里面的所有文件)并简单地重新编译并运行它。现在,每当我运行它时,我都会收到“RegistrationExpLib2.exe 中 0x637779ab 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000000。”在这一行
FourierTrans[i] = fftwf_plan_dft_2d(imgRows, imgCols, in[i], out[i], FFTW_FORWARD, FFTW_MEASURE);
我检查了调试器,所有返回的类字段都无法计算表达式。
我已经检查过并且正在正确读取图像。据我所知,所有内存都已正确分配。 fftw3 是我要链接的 C dll。
所以我真的很困惑,希望有人能指出一个可能的问题。我在想,要么,我在复制 Visual Studios 项目时在设置上做错了(即使自从它工作以来我没有做任何更改),或者我在 header 中错误地分配了内存。我想到的另一个问题是每个图像大约 20MB,所以我可能会弄乱堆。
我真的很感激任何帮助。
读入的图像通常每张为 10-20MB。代码被编译为 32 位二进制文件。
这是导致崩溃的代码的相关简化部分。
#define TESTNUM 80
//A simple test main.
int main() {
ComplexImageFFTW a;
ComplexImageFFTW b[TESTNUM];
ComplexImageFFTW* ptrB;
ptrB = b;
printf("start\n");
a.readImage("imagefile1", true);
printf("Mission\n");
for(int i = 0; i < TESTNUM; i++) {
b[i].readImage("imagefile2", true);
}
//Crash occurs here.
FourierTrans[i] = fftwf_plan_dft_2d(imgRows, imgCols, in[i], out[i], FFTW_FORWARD, FFTW_MEASURE);
...
} //End main
最佳答案
Access violation writing location 0x00000000
表示您正在尝试写入内存位置 0x00000000
,即,您正在写入一个空指针。我认为指针 p
的值可能为 0。
可能您忘记调用您的 Registration::setUpRegistration
方法?
关于c++ - 傅里叶变换规划期间的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653872/