所以我有这个问题,我目前正在学习如何获取动态内存以在堆中分配变量(在C ++上),所以我只是创建一个结构并在其中放置一些项目,然后在deleteList(estructura *)函数中删除所有变量,问题是我分配了大量内存,因此泄漏了。

    struct estructura
{
    char *algo;
    double *algo2;
    estructura *next;
};

estructura* lastEstructura(estructura *head)
{
    estructura *current = head;
    while (current -> next)
    {
        current = current -> next;
    }
    return current;
}

void crearLista(estructura *head)
{
    for (int i = 0; i < 8200; i++)
    {
        estructura *current = new estructura;
        current -> algo = new char[100];
        current -> algo2 = new double;
        current -> next = nullptr;
        estructura *temp = lastEstructura(head);
        temp -> next = current;
    }
}

void deleteList(estructura *head)
{
    estructura *current = head;
    while (current) {
        estructura *temp = current;
        current = current -> next;
        delete [] temp -> algo;
        delete temp -> algo2;
        temp -> next = nullptr;
        delete temp;
    }
}

int main(int argc, const char * argv[])
{
    int i = 0;
    cout << "enter: ";
    cin >> i;
    do {
        estructura *head = new estructura;
        head -> algo = new char[100];
        head -> algo2 = new double;
        head -> next = nullptr;
        crearLista(head);
        deleteList(head);
        cout << "enter: ";
        cin >> i;
    } while (i == 1);
    return 0;
}


我真的很想了解这一点,为什么我会得到这个泄漏,所以请有人帮助我,我已经尝试搜索并且没有找到可以帮助我的东西。
(我是C ++的新手)

最佳答案

问题的一部分是您正在分配已分配对象的成员。如果您只有以下代码,您的代码将更简单:

struct estructura
{
    char algo[100];
    double algo2;
    estructura *next;
};


这样,new estructura会为您提供所需的完整结构,然后delete current是您唯一需要做的事情。同样,如果您向estructura添加新成员,则一切都将正常进行,而不必担心添加另一个new / delete对。

08-17 23:29