c++ - C++ 指针不为空但不能被释放
问题描述
我正在实现一个开放的哈希表。我的问题出现在析构函数中,我遍历数组中的所有存储桶,对于每个数组,我将删除链表中的所有节点。
// Deallocate all buckets
for (int i=0; i<maxBuckets; i++) {
Cell * p = m_data[i];
while (p != nullptr) {
Cell * temp = p;
p = p->next;
delete temp;
}
}
delete [] m_data;
但它报告pointer being freed was not allocated
删除操作。这里出了什么问题?
解决方案
错误很明显。您尝试了delete
一个未返回的值new
。
我们不知道该值是否是未分配值的地址,只是未初始化(垃圾),或者您是否损坏了堆。您还没有提供信息来确定这一点。
但是你确实知道你试图释放的值是不正确的,你需要弄清楚它是从哪里来的。
推荐阅读
- java - 如何使用带有 selenium webdriver 的 Windows 文件资源管理器选择多个文件
- webrtc - 为什么 IP 伪装会修复有问题的 WebRTC 连接?
- typescript - 通过字段推断文字对象联合的类型
- go - Dep/Godep:在包级别定义修订
- javascript - 使用 Chrome 扩展和 Selenium Webdriver 设置 cookie
- python - Python/pandas 数据帧中的数值模糊比较连接
- ruby-on-rails - Rails collection_select,使用数据库数据和任意值填充下拉字段
- css - 自动处理 CSS 文件
- python - cx_freeze 调试控制台?
- dax - 根据 YTD Sum 过滤 Dax 计算