当前位置: 首页 > 知识库问答 >
问题:

c++ - std::list<TCHAR*> 请问会导致内存访问异常或者内存泄露吗?

柯苗宣
2023-05-27
// tcharTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <list>
#include <tchar.h>


void SetList(std::list<TCHAR*>& _list)
{
    _list.push_back(_T("ref1"));
    _list.push_back(_T("ref2"));
    _list.push_back(_T("ref3"));
    _list.push_back(_T("ref4"));
    _list.push_back(_T("ref5"));


    for (auto it1 = _list.begin(); it1!= _list.end(); ++it1)
    {
        std::cout<<_T("set list  function: ")<<*it1<<std::endl;
    }

}


std::list<TCHAR*> ReturnList()
{
    std::list<TCHAR*> list;
    list.push_back(_T("return1"));
    list.push_back(_T("return2"));
    list.push_back(_T("return3"));
    list.push_back(_T("return4"));
    list.push_back(_T("return5"));

    for (auto it2 = list.begin(); it2!= list.end(); ++it2)
    {
        std::cout<<_T("return_list  function: ")<<*it2<<std::endl;
    }

    return list;
}



int _tmain(int argc, _TCHAR* argv[])
{
    //引用
    std::list<TCHAR*> ref_list;
    SetList(ref_list);
    printf("\n");
    for (auto it1 = ref_list.begin(); it1!= ref_list.end(); ++it1)
    {
        std::cout<<_T("set list main: ")<<*it1<<std::endl;
    }
    printf("\n");

    //返回值
    std::list<TCHAR*> return_list;
    return_list = ReturnList();
    printf("\n");
    for (auto it2 = return_list.begin(); it2!= return_list.end(); ++it2)
    {
        std::cout<<_T("return list main")<<*it2<<std::endl;
    }


    system("pause");
    return 0;
}

std::list<TCHAR> ReturnList() 出栈后访问list是否可能出现THCAR被释放导致访问异常? 两个函数放的TCHAR* ,用完这个list后需要list.clear()吗?

共有1个答案

司马德水
2023-05-27
  1. std::list<TCHAR> ReturnList() 出栈后访问list是否可能出现THCAR被释放导致访问异常?

    不会出现访问异常。
    函数 std::list<TCHAR*> ReturnList() 函数返回值会发生一次拷贝。
  2. 两个函数放的TCHAR* ,用完这个list后需要list.clear()吗?

    不需要,因为不会造成内存泄漏。
    其中主要为,list 中的元素类型 TCHAR* 指向字符常量(位于只读存储区),不需要释放
 类似资料:
  • 本文向大家介绍ThreadLocal 内存泄露问题?相关面试题,主要包含被问及ThreadLocal 内存泄露问题?时的应答技巧和注意事项,需要的朋友参考一下 ThreadLocalMapThreadLocalThreadLocalThreadLocalMapset()get()remove()ThreadLocalremove()`方法 弱引用介绍: 如果一个对象只具有弱引用,那就类似于可有可无

  • 本文向大家介绍解决Tensorflow 内存泄露问题,包括了解决Tensorflow 内存泄露问题的使用技巧和注意事项,需要的朋友参考一下 使用tensorflow进行编程时,经常遇到操作不当,带来的内存泄露问题,这里有一个可以帮助debug问题所在方法: https://stackoverflow.com/questions/51175837/tensorflow-runs-out-of-mem

  • 我有一些和等,但是我没有设置。你觉得会是那样吗? 你有什么想法或建议吗? PS:该应用程序在Ubuntu机器上运行 多谢.

  • 我想首先说,这是我第一次必须处理性能,因为这是我第一次开发一个android应用程序。 该应用程序是一个源代码编辑器,在这里你可以打开文件,修改它们,并将它们保存回来。该应用程序由4个部分组成: 导航器视图:包含打开文件的ListView和打开文件夹的TreeView。 代码视图容器:它保存包含实际代码的视图。 代码容器:这是一个小视图,包含一个文本视图和一个自定义EditText(由我扩展Edi

  • 我正在玩rxjava,发现如果在活动被销毁之前没有完成订阅,则存在内存泄漏的风险,因为“可观察对象保留对上下文的引用”。如果订阅没有取消订阅,则此类情况的演示之一如下所示。已销毁(来源:https://github.com/dlew/android-subscription-leaks/blob/master/app/src/main/java/net/danlew/rxsubscriptions

  • 问题内容: 我正在运行django应用程序,其中包括matplotlib,并允许用户指定图形的轴。这可能会导致 “溢出错误:超出了Agg复杂度” 发生这种情况时,最多会占用100MB的RAM。通常,我会使用,和释放该内存,但是与该错误关联的内存似乎与该绘图对象无关。 有谁知道我该如何释放记忆? 谢谢。 这是一些给我Agg复杂度错误的代码。 问题答案: 我假设您可以至少运行一次您发布的代码。该问题仅