Chr*_*aes 1 c c++ malloc free new-operator
我使用C编写的一些函数创建自己的C/C++库; 其他用C++编写.在库内我使用new运算符:
mystruct * mystruct_alloc()
{
mystruct * ms = new mystruct;
return ms;
}
Run Code Online (Sandbox Code Playgroud)
现在我在C中使用这个库,如下所示:
mystruct *ms = mystruct_alloc();
// do stuff
free(ms);
Run Code Online (Sandbox Code Playgroud)
当我用valgrind检查时; 我收到这样的警告:
Mismatched free() / delete / delete []
Run Code Online (Sandbox Code Playgroud)
但我的印象是所有内存都正确释放.我知道有两种方法可以避免这个问题.
我可以重写我的C++代码来使用malloc:
mystruct * mystruct_alloc()
{
mystruct * ms = (mystruct *) malloc (sizeof(mystruct));
return ms;
}
Run Code Online (Sandbox Code Playgroud)
我可以dealloc在我的库中编写一个函数:
void mystruct_dealloc(mystruct *ms)
{
delete ms;
}
Run Code Online (Sandbox Code Playgroud)
我不会再有问题; 但最好的方法是什么?new更容易使用; 但它在valgrind中给出了那些警告.所以这是我的问题:
new和所有内存都正确释放free?(所以valgrind警告不是很重要)你总是应该以相应的方式返回内存:
free 对于 mallocdelete原料newoperator delete的用户定义的用户operator new在您的情况下,编写并调用C++库中的相应函数:
void mystruct_free(mystruct* ms)
{
delete ms;
}
Run Code Online (Sandbox Code Playgroud)