所以我有这个问题,我目前正在学习如何获取动态内存以在堆中分配变量(在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
对。