C++删除动态内存分配,但不能到达变量
我有一个动态内存分配列表。当程序结束时,我如何擦除此内存 在函数之外,我没有访问newList的权限,如果我在函数中擦除它并在返回之前删除newList,那么基本上我什么也不返回 当程序终止时,newList是否自动删除,或者我是否需要手动删除它 main.cpp:C++删除动态内存分配,但不能到达变量,c++,linked-list,C++,Linked List,我有一个动态内存分配列表。当程序结束时,我如何擦除此内存 在函数之外,我没有访问newList的权限,如果我在函数中擦除它并在返回之前删除newList,那么基本上我什么也不返回 当程序终止时,newList是否自动删除,或者我是否需要手动删除它 main.cpp: 要解决您的问题,您有两个解决方案: 将指针存储在main中的变量中,并将其删除,这不是最佳解决方案 返回一个自动变量而不是指针,当变量超出范围时将调用析构函数小心浅层复制问题*签出移动语义 使用智能指针 使用现代操作系统,程序终止后
要解决您的问题,您有两个解决方案: 将指针存储在main中的变量中,并将其删除,这不是最佳解决方案 返回一个自动变量而不是指针,当变量超出范围时将调用析构函数小心浅层复制问题*签出移动语义 使用智能指针 使用现代操作系统,程序终止后内存将被清理,但这不是一个解决方案!始终清理您使用过的所有资源
*如果创建一个浅层副本,并且您的类型具有原始指针,那么副本中的指针将指向与原始对象相同的对象。这意味着,一旦原始内存被删除,副本中的指针将指向无效内存。欢迎使用堆栈溢出。请花点时间阅读并参考您可以在此处询问的内容和方式。也许这将帮助您:查找智能指针
//reverse the list, return new list
List* reverseList(List &listToReverse) {
//dynamic memory allocation
List* newList = new List;
//pointer to first node
Node* currentPtr = listToReverse.getFirstNode();
while (currentPtr != 0) {
newList->AddElement(currentPtr->getdata());
currentPtr = currentPtr->getNextPtr();
}
Node* currentNode = newList->getFirstNode();
int size = newList->size();
while (currentNode != 0) {
currentNode->setId(size);
size--;
currentNode = currentNode->getNextPtr();
}
return newList;
}
int main() {
List l1;
cout << "The reversed list: " << endl;
reverseList(l1)->print();
system("pause");
return 0;
}