Valgrind - 条件跳转或移动取决于未初始化值错误

问题描述 投票:0回答:1

我在多线程程序中初始化数组时遇到了这个问题。 在 .c 程序的开头,我有一个数组的声明:

struct message* messages_received_front[N_MAX];
然后,当运行程序时,我做的第一件事就是调用“初始化函数”,它会执行如下操作:

for (int i = 0; i < N_MAX; i++) {
        messages_received_front[i] = create_message(-1, 0);
        messages_received_rear[i] = messages_received_front[i];
}

当调用函数 find_message 时,它会迭代这个数组,我收到错误:

Conditional jump or move depends on uninitialised value(s)

有什么好的办法可以解决吗?我实际上遇到过这个问题几次,到目前为止唯一有帮助的是像这样对数组进行硬编码:

messages_received_front = {NULL, NULL...}

具体说明:我知道这个错误来自哪里,但我无法在我之前提到的这个“初始化函数”中初始化它。

c multithreading valgrind declaration
1个回答
0
投票

您可以使用以下方法将 messages_received_front

all
归零:

message* messages_received_front[N_MAX] = {} ;

并且零保证代表空指针。

一般不应使用 C

NULL
宏(应首选 C++ 常量
nullptr
,零也可以)。

如果没有更多上下文,就无法判断这在语义上是否正确,而不是隐藏问题。

请注意,在 C++ 中,

message
本身就是一种类型,声明中不需要
struct
限定符。

© www.soinside.com 2019 - 2024. All rights reserved.