c++ - 傅里叶变换规划期间的访问冲突

标签 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 项目时在设置上做错了(即使自从它工作以来我没有做任何更改),或者我在 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/

相关文章:

c++ - UDT 服务器缓冲区大小?

c++ - boost::shared_ptr - 两个类之间的组合关系

c++ - 添加到 vector 后在析构函数内部双重释放

c++ - 每种哈希方法的不同值

c++ - Perl Win32::API 和指针

c++ - Lambda函数引用指针销毁检测

c++ - cout 打印十六进制而不是十进制

c++ - 在 Visual Studio 2010 中使用带有非托管代码的 DLL?

c++ - 错误 : invalid operands of types 'float' and 'int' to binary 'operator^'

C++将带有单词和数字的字符串转换为数字