我有以下功能(只释放分配的内存或2d矩阵)
void mat_free(Float_t ***mat)
{
free((*mat)[row_start]);
free((*mat));
}
注意:矩阵被分配为单个内存块,然后分成行。
然而,在另一个函数中调用了mat_free,我释放了2d矩阵,如下所示
mat_free(&A_in);
其中A_in是声明为
的2d矩阵Float_t **A_in;
然而尝试释放const 2d矩阵如下
const Float_t **A_in;
mat_free(&A_in);
这不编译并给我“错误C2664:'mat_free':无法将参数1从”const Float_t ***
“转换为”Float_t ***
“。因此,我尝试将mat_free(&A_in);
更改为mat_free((Float***&)A_in);
。但是,这有时会起作用,而其他时间会崩溃应用程序。这告诉我这个演员是不正确的。我通过运行多次调用free并检查内存使用情况的函数来确认它(我不认为它正在取消分配内存)
是一种通过引用将变量发送到函数的方法吗? 为什么编译器不会将此转换标识为错误或警告? 谢谢你的帮助:))