Valgrind:有条件的跳跃或移动取决于未初始化的值

时间:2013-07-18 23:32:34

标签: c++ valgrind

int* g () {
    int j = 2;
    return &j;
}

int main () {
    using namespace std;

    int v = *g();
    //  assert(v == 2);  // Valgrind: Conditional jump or move depends on uninitialised value(s)
}

因此,该断言导致Valgrind错误,但我不太确定该错误意味着什么,以及为什么我不允许在该语句上调用assert。

在断言之前已经初始化了

'v',那么为什么会导致该错误呢?

提前谢谢你。

1 个答案:

答案 0 :(得分:2)

j已经初始化,但是一旦依赖它具有任何特定价值,即当它超出范围时就会变得非法,从而实际上没有初始化。

此代码返回指向j

的指针
int* g () {
    int j = 2;
    return &j;}

此代码取消引用该指针:

int v = *g();

j不再存在 - 当g返回时,它超出了范围。您不能取消引用指向不再存在的变量的指针。