C语言静态变量初始化异常求助:变量未按预期设为0
静态变量初始化异常问题
我遇到一个静态变量初始化的问题:程序启动时该变量未按预期初始化为0,而是呈现随机值。
文件1中的函数:
void setInput() { /*.... Code ...*/ sysUpdate(SysOutput.u16_state); /*.... Code ...*/ }
该函数会调用文件2中的sysUpdate函数:
bool sysUpdate(uint16 state) { static uint32 u32_Counter = 0; if (Condition) { u32_Counter += 30; if (u32_Counter > 30000) { u32_Counter = (uint32)0; /*.... Code ...*/ } } /*.... Code ...*/ }
问题在于,尽管我将u32_Counter初始化为0,但它仍会取随机值,且首次运行时Condition条件始终为真。请问可能是什么原因导致这个问题?
问题原因更新
此问题由另一静态数组的越界写入导致。具体问题代码如下:
static uint8 state[xNUMBER][yNUMBER]; const uint8 state1[xNUMBER][yNUMBER] = {{0, 1, 0, 0}, {1, 0, 0, 0},{1, 1, 1, 1}}; const uint8 state2[xNUMBER][yNUMBER] = {{0, 1, 1, 1}, {1, 1, 0, 0},{1, 1, 1, 1}}; length = sizeof(state)/sizeof(state[0][0]); for(i = 0; i < length; i++) { for (j = 0; j < length; j++) { if(condition) { state[i][j] = state1[i][j]; } else { state[i][j] = state2[i][j]; } } }
内容的提问来源于stack exchange,提问作者SmallX
相关产品推荐
相关产品推荐

