【发布时间】:2012-04-14 08:22:48
【问题描述】:
您好,我通过 valgrind 运行了我的程序,这是报告
堆摘要: 在退出时使用:1 个块中的 8 个字节 总堆使用量:1 个分配,0 个释放,8 个字节分配 泄漏摘要: 肯定会丢失:1 个块中的 8 个字节
这是我的程序
int main() {
NodeData nodedata1(1, 'a');
List list1;
list1.insert(&nodedata1);
return 0;
}
//---my List class
class List {
public:
List();
bool insert(NodeData*); // insert one Node into list
bool isEmpty() const;
private:
struct Node { // the node in a linked list
NodeData* data; // pointer to actual data, operations in NodeData
Node* next;
};
Node* head; // pointer to first node in list
};
// my bool insert method
bool List::insert(NodeData* rightPtr) {
Node* newPtr = new Node;
newPtr->data = rightPtr;
if (isEmpty() || *newPtr->data < *head->data) {
newPtr->next = head;
head = newPtr;
}
else {
Node* current = head;
while (current->next !=NULL && *current->next->data < *newPtr->data) {
current = current->next;
}
newPtr->next = current->next;
current->next = newPtr;
}
return true;
}
【问题讨论】:
-
列表没有
delete这些节点的析构函数 -
除非这是一个练习或家庭作业,否则你真的应该省去所有这些麻烦,而是使用
std::list。 -
您应该为您的列表创建一个析构函数,以便在列表被销毁时销毁您的所有节点。
标签: c++ memory memory-leaks valgrind