指向同一对象的多个原始指针
Multiple raw pointers to the same object
我有多个指向同一对象的指针。
表中的每个节点如下所示:
struct Node
{
Object * objPtr;
Node * next;
}
从文件中读取数据并存储对象:
Object * currObj;
currObj = new Object(data);
insert(*currObj);
插入到表中:
void Table::insert(Object & object_)
{
char key[200];
object_.getKeys(key);
char * token;
token = strtok(key, " ");
while(token != NULL)
{
index = calcIndex(token);
Node * newNode = new Node;
newNode->objPtr = &object_;
newNode->next = NULL;
newNode->next = table[index];
table[index] = newNode;
size++;
token = strtok(NULL, " ");
}
}
发生的情况是每个对象都有多个键,所以我想多次将其添加到表中(添加指针(。但是,我到处都出现内存泄漏,因为我尝试访问已删除的部分内存。我想知道析构函数是搞砸了,还是插入了(我没有正确分配一些东西(?强文本
UPD
~table()
{
int i;
for(i=0; i<capacity; i++)
{
Node * head = table[i];
Node * curr;
while(head)
{
curr = head->next;
head->next = NULL;
delete head;
head = curr;
}
}
delete [] table;
}
~Node()
{
delete objPtr;
objPtr = NULL;
delete next;
next = NULL;
}
~Object()
{
if(data)
delete [] data;
}
但是,我到处都出现内存泄漏,因为我尝试访问已删除的部分内存。
这不是内存泄漏。当您不再指向已分配的内存时,内存会泄漏,因此您无法再释放它。
您描述的是无效的内存访问,它具有未定义的行为。
没有 mcve,就不可能说出你的错误在哪里,但我的水晶球告诉我,你可以通过使用智能指针来避免它。
相关文章:
- 从堆栈分配的原始指针构造智能指针
- 将unique_ptr分配给原始指针
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- C++原始指针和"delete"
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 如何正确实现具有原始指针的类的复制构造函数?
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- 为包含原始指针的对象C++智能指针
- c++:复制、删除和运算符=在原始指针映射中
- C++模板,用于通过常量引用和原始指针传递向量
- C++为什么原始指针不会增加shared_ptr的引用计数?
- 从shared_ptr获取原始指针以将其传递给需要 raw 的函数
- 如何包装多级原始指针以赋予其容器语义
- 为什么我可以通过原始指针而不是shared_ptr来修改对象
- 将原始指针传递给接受unique_ptr作为参数的函数
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 更改保留指向其字段的原始指针的对象地址
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- 如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?