“'X` 可能在此函数中未初始化”警告和 pthread,C
"'X` may be uninitialized in this function" warning and pthread, C
下面的代码会产生以下警告:
‘factoryThread’ may be used uninitialized in this function [-Wmaybe-uninitialized]
pthread_t factoryThreads[NUM_FACTORIES];
int factoryNums[NUM_FACTORIES];
for (int i = 0; i < NUM_FACTORIES; i++) {
factoryNums[i] = i + 1;
pthread_t factoryThread;
factoryThreads[i] = factoryThread;
pthread_create(&factoryThreads[i], NULL, createAndInsertCandy,
&factoryNums[i]);
}
代码似乎按预期工作,但我仍然很好奇是什么导致了警告以及我可以采取什么措施来修复它。
您通过使用具有自动存储持续时间的未初始化变量的值调用了未定义的行为,这是不确定的,它只是碰巧起作用.
删除无意义的变量和赋值。
pthread_t factoryThreads[NUM_FACTORIES];
int factoryNums[NUM_FACTORIES];
for (int i = 0; i < NUM_FACTORIES; i++) {
factoryNums[i] = i + 1;
pthread_create(&factoryThreads[i], NULL, createAndInsertCandy,
&factoryNums[i]);
}
下面的代码会产生以下警告:
‘factoryThread’ may be used uninitialized in this function [-Wmaybe-uninitialized]
pthread_t factoryThreads[NUM_FACTORIES];
int factoryNums[NUM_FACTORIES];
for (int i = 0; i < NUM_FACTORIES; i++) {
factoryNums[i] = i + 1;
pthread_t factoryThread;
factoryThreads[i] = factoryThread;
pthread_create(&factoryThreads[i], NULL, createAndInsertCandy,
&factoryNums[i]);
}
代码似乎按预期工作,但我仍然很好奇是什么导致了警告以及我可以采取什么措施来修复它。
您通过使用具有自动存储持续时间的未初始化变量的值调用了未定义的行为,这是不确定的,它只是碰巧起作用.
删除无意义的变量和赋值。
pthread_t factoryThreads[NUM_FACTORIES];
int factoryNums[NUM_FACTORIES];
for (int i = 0; i < NUM_FACTORIES; i++) {
factoryNums[i] = i + 1;
pthread_create(&factoryThreads[i], NULL, createAndInsertCandy,
&factoryNums[i]);
}