Valgrind Error: in use at exit: 72,704 bytes C++ Initialization List weirdness with char*

Valgrind Error: in use at exit: 72,704 bytes C++ Initialization List weirdness with char*

问题:

我遇到了一个我没想到的奇怪问题。我有一个名为 Answers 的 class 在 header 中是这样的:

class Answer
{
    char* aText;
    bool b_correct;
public:
    Answer():aText(0){;}  //default constructor
}

主要(测试)driver代码是这样的:

int main(void) 
{

    static const unsigned int MAX_ANSWERS = 5;
    Answer answers[MAX_ANSWERS];
}

我得到的(意想不到的)怪事是发生了一个分配,而且我还没有在我的代码中的任何地方使用一个新的。我猜 char* 正在初始化列表中调用它。

我正在使用 valgrind 测试我的代码,我得到了 11 个分配和 10 个释放。当我删除 :aText(0) 的初始值设定项时,额外的分配消失了。

我知道这是构建错误的代码。我正在按照课程大纲学习如何用 C++ 编写。有人可以帮我了解内存是如何分配的,或者在初始化列表期间发生了什么导致调用 new 吗?

我知道错误来自显示的代码。我知道当我编译时会发生额外的分配,运行 只是这段代码。

Valgrind 输出:

==12598== Memcheck, a memory error detector
==12598== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12598== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==12598== Command: ./Answers
==12598== 
==12598== 
==12598== HEAP SUMMARY:
==12598==     in use at exit: 72,704 bytes in 1 blocks
==12598==   total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==12598== 
==12598== LEAK SUMMARY:
==12598==    definitely lost: 0 bytes in 0 blocks
==12598==    indirectly lost: 0 bytes in 0 blocks
==12598==      possibly lost: 0 bytes in 0 blocks
==12598==    still reachable: 72,704 bytes in 1 blocks
==12598==         suppressed: 0 bytes in 0 blocks
==12598== Rerun with --leak-check=full to see details of leaked memory
==12598== 
==12598== For counts of detected and suppressed errors, rerun with: -v
==12598== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

平台信息:

软呢帽 22

gcc.x86_64 5.1.1-4.fc22

valgrind.x86_64 1:3.10.1-13.fc22

代码块。x86_64 13.12-14.fc22

这是一个已知的 GCC 5.1 错误,而不是 valgrind 错误。

详情在这里: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64535

可能的解决方法: 将 GCC 降级到早期版本或等待 Valgrind 更新此错误的修复程序。这两种解决方案都由各自的社区开发。