动态调用dll时函数声明和函数定义不一致会导致内存泄漏,比如有这样一段dll加载和函数声明。
HMODULE hdll= LoadLibrary("test.dll");
typedef void (*Test)(Mat, int*);
Test t = (Test)GetProcAddress(hdll, "Test");
假如该函数的定义是
void Test(cv::Mat &m, int* i){}
在运行编译时这段代码并不会报错,运行结果也没有问题,但会导致内存泄漏,初步猜测是调用该函数时进行了值传递,导致了Mat矩阵发生了复制,但是该Mat矩阵并不会自动释放,所以会导致内存使用不断增加,最后程序崩溃。
修改也很简单,保持函数定义和声明一致就行。