傅立叶变换规划中的访问冲突
Access Violation during planning of Fourier Transform
一点背景,我对Java更有经验,并且有一些C/c++经验。
我用的是Visual studio 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 studio项目(即使我没有改变任何东西,因为它是工作),或者我在头错误地分配内存。我想到的另一个问题是每个图像大约有20MB,所以我可能会弄乱堆。我真的很感激你的帮助。
每个读取的图像通常为10-20MB。该代码被编译为32位二进制。
这是导致崩溃的代码的相关简化部分。
#define TESTNUM 80
//A simple test main.
int main() {
ComplexImageFFTW a;
ComplexImageFFTW b[TESTNUM];
ComplexImageFFTW* ptrB;
ptrB = b;
printf("startn");
a.readImage("imagefile1", true);
printf("Missionn");
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
方法?
在阅读了80多张图片后。Heap的使用量大于1.7GB。由于这是作为32位二进制编译的,因此内存限制约为2GB。当程序开始规划傅里叶变换时,会导致内存分配失败,从而创建一个空指针。然后程序在未检查的情况下使用指针,导致访问冲突错误。
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 傅立叶变换规划中的访问冲突