傅立叶变换规划期间的访问冲突

时间:2011-07-11 17:17:04

标签: c++

一点点背景,我对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项目时设置错误(即使我没有改变任何东西,因为它工作),或者我在标题中错误地分配了内存。我想到的另一个问题是每个图像大约是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

2 个答案:

答案 0 :(得分:2)

Access violation writing location 0x00000000表示您正在尝试写入内存位置0x00000000,即您正在写入空指针。我认为指针p的值可能为0.

您可能忘记拨打Registration::setUpRegistration方法?

答案 1 :(得分:1)

阅读80多张图片后。堆的使用量> 1.7GB。由于这是编译为32位二进制文​​件,因此存在大约2GB的内存限制。当程序去计划傅里叶变换时,它导致内存分配失败,从而创建一个空指针。然后程序开始使用未选中的指针,导致访问冲突错误。