在 valgrind 中使用 QSharedPointer 和 new[] 会产生"Mismatched free() / delete / delete[]"
Using QSharedPointer with new[] yields "Mismatched free() / delete / delete[]" in valgrind
我有以下代码:
QPair<QSharedPointer<unsigned int>, int> someclass::somefunction() {
int siz = data_size();
QSharedPointer<unsigned int> buffer(new unsigned int[siz]);
// Fill the buffer...
return qMakePair(buffer, siz);
}
在某个时刻,这个函数返回的QSharedPointer
将超出作用域,并且构造函数中的指针设置将被释放。使用valgrind 3.6.1,我得到一个"Mismatched free()/delete/delete[]"错误。我使用QSharedPointer
有什么问题吗?还是我必须忍受这个valgrind警告?
解决这个问题的一种方法是编写一个自定义删除器并将其传递给QSharedPointer
的构造函数,如下所示:
template <typename T_>
void do_delete(T_ buf[])
{
delete[] buf;
}
和
QSharedPointer<unsigned int> buffer(new unsigned int[siz], do_delete<unsigned int>);
我不确定是否有一个更优雅的解决方案(这将是很好的)
相关文章:
- 在 C++ 中将 malloc/free 替换为 new/delete
- 无效的free() / delete / delete[] / realloc(), 4 字节在大小为 16 的块内分配
- 在C++中,"new/delete"在结构上代替"malloc/free"有多好?
- 在回溯中使用“delete”解除分配时,出现“free()”错误
- 如何从 free() 或 delete() 中捕获或处理段错误
- malloc()/free()/new/delete/delete[] 的算法复杂度是多少?
- 如果使用malloc分配的内存是使用delete而不是free删除的
- “new/malloc”应该“delete/free”的人
- 标准C++的哪些部分将调用malloc/free而不是new/delete
- C++中的 malloc/free 和 new/delete 兼容性
- 编译器将 malloc/free 或 new/delete 对优化为 alloca
- 为什么使用 malloc/free,当我们有 new/delete 时
- 如果分配是在堆栈或堆上完成的,那么free()和delete[]有关系吗
- QList析构函数行为-对列表中的指针调用delete/free()
- Valgrind reporting Mismatched free() / delete / delete []
- Invalid free() / delete / delete[] / realloc() for fclose()?
- 在 valgrind 中使用 QSharedPointer 和 new[] 会产生"Mismatched free() / delete / delete[]"
- 在MsgPack中不匹配的free()/delete
- 当代码流中既没有delete也没有free时,为什么在stdc++库中调用delete
- 赋值运算符中的 free() / delete / delete[] / realloc() 错误无效