gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:13:21 27 4
gpt4 key购买 nike

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 错误,但我不太确定该错误的含义,以及为什么不允许我对该语句调用断言。

'v' 在断言之前已经初始化,那么为什么会导致该错误?

提前致谢。

最佳答案

j 已初始化,但一旦依赖它具有任何特定值变得非法,它就变得有效地未初始化,这发生在它超出范围时。

这段代码返回了一个指向j的指针:

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

此代码取消引用该指针:

int v = *g();

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

关于c++ - Valgrind:有条件的跳跃或移动取决于未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com