【发布时间】:2010-08-09 12:49:10
【问题描述】:
我需要一些帮助来查找我的 C++ 代码中的内存泄漏。我尝试将这些行放在我的构造函数中,但由于构造函数中的第 2 行和第 3 行,它会导致内存泄漏:
Myclass::Myclass()
{
ACE_Time_Value tm = ACE_OS::gettimeofday();
m_obj.firstStr() = tm.sec();
m_obj.secondStr() = tm.usec();
}
这里,firstStr() 和 secondStr() 都是在另一个类中返回 std::string& 的方法。
任何建议这个内存泄漏取决于什么?我不确定这两行是否是内存泄漏的实际原因,但 Valgrind 指向这两行,我不知道如何找到泄漏。
【问题讨论】:
-
object.method() = some_string;语法看起来很奇怪/违反直觉。你能提供这些方法的定义吗? -
它们只是返回类的受保护属性,并且都是 std::string 类型。 std::string& firstStr() { return attr1;} 等等。
-
m_obj.firstStr() 和 secondStr() 是否返回指针?如果是这样,您正在为指向字符串的指针的副本分配一些整数值(假设 tm.sec() 和 tm.usec() 正在返回长整数)。无论如何,我想您的问题与您将 tm 的值分配给 firstStr() 和 secondStr() 返回的任何内容的副本(引用字符串?)有关。你确定你的编译器没有抱怨别的吗?
-
另一个问题:再次假设 sec() 和 usec() 提供整数值,您是否检查过您的字符串是否包含预期值?我无法在 std::string 中长时间考虑运算符重载。如果您的字符串包含正确的值,则某处一定有过载,可能泄漏发生在那里。
-
我猜 Valgrind 指向这些行,因为您将 long int 分配给 string&。我想知道,你想达到什么目标以及那里到底发生了什么。
标签: c++ memory-leaks