std :: string内存泄漏

时间:2012-10-21 20:18:09

标签: c++ string valgrind std

我有这个课程AppController和函数connectPlayer

/* AppController.h */
    class AppController
    {
          // Some other declarations ...
      private:
            static const string TAG;
    };

/* AppController.cpp */

#include "AppController.h"
const string AppController::TAG = "AppController";

AppController::AppController() {
    /* some code here...*/
}

void AppController::connectPlayer() {
    std::string port;
    std::string host;
    port = CM->getMenu()->getData("PORT");
    host = CM->getMenu()->getData("HOST");
    this->setState("Connecting...");
    Logger::info(TAG, "Port: " + port);
    Logger::info(TAG, "Host: " + host);
}

当我执行程序时,我从valgrind得到了这个:

==7848== 25 bytes in 1 blocks are definitely lost in loss record 160 of 671
==7848==    at 0x402842F: operator new(unsigned int) (vg_replace_malloc.c:255)
==7848==    by 0x4210A83: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==7848==    by 0x4212CF7: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==7848==    by 0x4212E65: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==7848==    by 0x8080501: AppController::connectPlayer() (in /home/maine/Escritorio/taller7542/UltimaVersion/src/main)

有什么想法吗?提前谢谢!

3 个答案:

答案 0 :(得分:7)

全局范围内有std::string个对象:AppController::TAG

当应用程序以非常正常的方式完成时,您会遇到全局对象的这种valgrind错误。可能没什么值得担心的。

如果您(不能/不想)更改您的程序 - 请阅读此文档:http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress以消除此错误。

答案 1 :(得分:1)

有时候,valgrind会给出误报。这意味着即使valgrind说你失去了记忆,实际上你也没有。

唯一需要担心的是当您调用exit()函数时,如this问题中所述。

如果您不想再看到这些警告,可以创建一个抑制文件,为valgrind提供一些有关忽略哪些错误的信息。

答案 2 :(得分:1)

当我在全局范围内的类中有一个字符串时,我曾经看过这个问题。 Valgrind一直抱怨说我在泄漏记忆。我只是&#34;删除&#34;退出时的对象,错误消失了。

相关问题