【发布时间】:2018-03-25 12:19:30
【问题描述】:
所以..我正在尝试编写我的第一个析构函数。我有某事,但我不知道它是否真的在做它应该做的事情。
我有一个线性链表,其中每个节点都有 3 个动态分配的 char 数组和一个指向另一个也有 1 个动态 char 数组的链表的下一个指针 (heads)。换句话说,数据结构是链表的链表。这是我写的:
nodea * tempa = heada;//create a new node to
nodesongs *temps=heada->heads;
while(heada)// while the list is not empty
{
tempa= heada ->nexta;// traverse the list
delete [] heada->dataa.name ;
delete [] heada->dataa.story ;
delete [] heada->dataa.description ;
while(heada->heads)
{
temps = heada ->heads->nexts;
delete[] heada->heads->datas.title;
delete heada->heads;
heada->heads = temps;
}
delete heada;
heada = tempa;
}
如果您能看一下,我将不胜感激,并且还想知道人们是否有一种常见的方法来测试他们的代码是否存在内存泄漏?
【问题讨论】:
-
在现代 C++ 中,我们使用智能指针和 STL 容器来处理内存。这样做几乎可以消除任何内存泄漏的机会。您的代码非常适合研究低级的、过去的内存管理实践。这很重要,但此代码不应通过任何现代代码审查。
-
YAIT(又一个不称职的老师)
-
'奠定C++的基础' std::string 是基础!
-
如果你不能使用
std::string,写一个简化的MyString。您不必手动处理列表中的字符串内存。 -
@Jarod42 这个。您将了解如何制作智能指针及其作用;这是有价值的。老师认为他们教你的东西(关于使用指针等)少了。
标签: c++ memory-management destructor