Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++删除动态内存分配,但不能到达变量_C++_Linked List - Fatal编程技术网

C++删除动态内存分配,但不能到达变量

C++删除动态内存分配,但不能到达变量,c++,linked-list,C++,Linked List,我有一个动态内存分配列表。当程序结束时,我如何擦除此内存 在函数之外,我没有访问newList的权限,如果我在函数中擦除它并在返回之前删除newList,那么基本上我什么也不返回 当程序终止时,newList是否自动删除,或者我是否需要手动删除它 main.cpp: 要解决您的问题,您有两个解决方案: 将指针存储在main中的变量中,并将其删除,这不是最佳解决方案 返回一个自动变量而不是指针,当变量超出范围时将调用析构函数小心浅层复制问题*签出移动语义 使用智能指针 使用现代操作系统,程序终止后

我有一个动态内存分配列表。当程序结束时,我如何擦除此内存

在函数之外,我没有访问newList的权限,如果我在函数中擦除它并在返回之前删除newList,那么基本上我什么也不返回

当程序终止时,newList是否自动删除,或者我是否需要手动删除它

main.cpp:
要解决您的问题,您有两个解决方案:

将指针存储在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;
}