C++类实例数组初始化

标签 c++ arrays gcc g++ valgrind

我有一个 A 类如下:

class A
{
public:    
    A()
    {        
        printf("A constructed\n");        
    }
    ~A();
    //no other constructors/assignment operators    
}

我在别处有以下内容

A * _a;

我初始化它:

int count = ...
...
_a = new A[count];

我用

访问它
int key = ....
...
A *a_inst = &(_a[key]);
....

运行正常,执行构造函数中的printf,A中的所有字段都没有问题。

我使用以下参数运行 Valgrind:

valgrind --leak-check=full --show-reachable=yes --track-origins=yes -v ./A_app

Valgrind 一直在大喊

Conditional jump or move depends on uninitialised value(s)

然后是访问器语句的堆栈跟踪。

谁能解释为什么会这样? 具体来说,如果 Valgrind 所说的是真的,为什么要执行构造函数?

最佳答案

这可能意味着 keycount 包含未初始化的值。即使您确实在声明中对其进行了初始化,例如int key = foo + bar;,可能是 foobar 未初始化,valgrind 将其传递给 key

关于C++类实例数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387101/

相关文章:

android - 在 Qt Quick 应用程序中,Element 在全高清手机上运行的开发应用程序中出现困惑

gcc - gcc 中用户定义部分的对齐

javascript - 使用 .findIndex 将满足条件的其他数组元素的所有索引保存到新数组中

c - 了解指针取消引用和数组索引之间的区别

php - 在 PHP 中将引用添加到数组会创建一个引用数组

c++ - 安装了 g++ 但 make 说找不到 g++(奇怪)

c - 隐式声明所有变量 volatile

c++ - 执行我程序的 .exe 文件时出错

c++ - 检查 bool 是否在混合 C/C++ 中定义

c++ - 从内存中解码音频 - C++