指向同一对象的多个原始指针

Multiple raw pointers to the same object

本文关键字:原始 指针 对象      更新时间:2023-10-16

我有多个指向同一对象的指针。

表中的每个节点如下所示:

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,就不可能说出你的错误在哪里,但我的水晶球告诉我,你可以通过使用智能指针来避免它。