我正在编写图像注册程序,使用mkl_free()时发现一个奇怪的错误。我使用MKL函数从MATLAB编写了矩阵指数函数 - expm()的实现。我已经单独测试了它,它可以正常运行而不会遇到任何错误。
可以在此处找到代码:https://github.com/poliu2s/MKL/blob/master/matrix_exponential.cpp
当我从需要它进行计算的其他函数调用它时,会出现问题。我的程序当前在我调用第一个mkl_free()之前崩溃,所以我怀疑它是某种形式的内存泄漏。但是,函数中使用的矩阵不应该是自包含的吗?我没有看到释放它们会导致整个程序崩溃。
调用mkl_free_buffers();和mkl_thread_free_buffers();没有产生我能观察到的效果。我尝试在程序执行开始时以速度为代价关闭带有mkl_disable_fast_mm()的英特尔内存管理器,但也无济于事。
我检查了进入函数本身的输入,矩阵完全有效 - 就像我在测试中使用的那样。
当我在某些循环中调用mkl_free(array)时,为什么我的程序会崩溃?
答案 0 :(得分:1)
您的代码存在一些问题。也不一定但可能会导致段错误,但您应该在调查问题时修复它们。
void cblas_dcopy(const MKL_INT N,const double * X,const MKL_INT incX,double * Y,const MKL_INT incY);
关于风格的另外两条评论: