描述:
0x000000006374B315 (libfftw3f-3.dll)处(位于 XXX.exe 中)引发的异常: 0xC0000005: 读取位置 0x000001382D378650 时发生访问冲突。
调试发现,问题出现在fftwf_destroy_plan。
分析:
此类异常的原因常见为:
- 数组越界
- 空指针
- 无效指针
查阅fftw文件中发现:
大概意思是当调用fftw_cleanup_threads函数来清理线程时,它会清除掉所有fftw分配的内存和资源(包括线程相关的数据),此后不可再调用之前所分配的plans。fftw_cleanup也有类似的效果。
我在两个类(类1、类2)中都用调用fftw函数。其中在类1中调用了fftw的线程,在析构函数时调用fftw_cleanup_threads来关闭线程。在最后关闭程序时,先调用了类1的析构函数,再调用类2的析构函数。类1析构函数的fftw_cleanup_threads会将整个程序中fftw分配的内存和资源都释放掉(包括类2中的)。因此调用类2的析构函数时,fftwf_destroy_plan函数出错。