我在多线程程序中初始化数组时遇到了这个问题。 在 .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...}
具体说明:我知道这个错误来自哪里,但我无法在我之前提到的这个“初始化函数”中初始化它。
您可以使用以下方法将 messages_received_front
的
all归零:
message* messages_received_front[N_MAX] = {} ;
并且零保证代表空指针。
一般不应使用 C
NULL
宏(应首选 C++ 常量 nullptr
,零也可以)。
如果没有更多上下文,就无法判断这在语义上是否正确,而不是隐藏问题。
请注意,在 C++ 中,
message
本身就是一种类型,声明中不需要 struct
限定符。