【问题标题】:Memory leak in c++ found with Visual Studio使用 Visual Studio 发现 C++ 中的内存泄漏
【发布时间】:2014-06-26 15:34:42
【问题描述】:

我在使用 C++ 删除时遇到问题。我不确定我是否理解何时泄漏内存以及何时不泄漏。但是根据 Visual Studio 有泄漏。

这是泄漏内存吗?实际的方法更大,我想使用 c 作为结构的一部分。

char *c=copio("hola");
char *copio(char * c1)
{
    char * ret=new char[strlen(c1)+1];
    strcpy(ret,c1);
    return ret;
};

还有这个?这种情况下aux是辅助的,所以离开大方法的时候就不用了

archivo *aux=ultimoArchivo(m->listaArchivos);
archivo * ultimoArchivo(archivo* lista){
    if(lista==NULL){
        return NULL;
    }else{
        if(lista->sig==NULL){
            return lista;
        }else{
            return ultimoArchivo(lista->sig);
        }
    }
}

谢谢

【问题讨论】:

  • 这里没有足够的信息来决定您是否泄漏内存。如果你从不删除copio 分配的内存,那么是的,你泄漏了它。也就是说,没有理由使用char* 作为字符串或编写自己的链表,只需使用标准库即可。
  • 天哪。您在使用 C++ 时没有使用正确的 string 类?有什么理由吗?
  • 你考虑过使用 C++11 智能指针吗?
  • 这是一个学校项目,我们不允许使用任何这些东西。不过谢谢

标签: c++ pointers memory-leaks


【解决方案1】:

在第一个代码 sn-p 中,您必须确保在使用完 copio 返回的指针后将其删除,否则会导致内存泄漏。但正如其他人所说,除非这是一个练习,否则使用std::string 进行字符串操作,或者,如果不是,至少声明你自己的类并在析构函数中执行delete(或使用std::unique_ptr 或@987654325 @,即智能指针)。

我不明白你的第二个代码 sn-p,看起来那里没有分配,所以不知道你怎么会导致内存泄漏。

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多