Memset枚举数组值设置不正确(C/C++)

use*_*291 2 c c++ arrays enums memset

我正在尝试使用memset将枚举数组中的所有值设置为单个值,但我没有看到正确的结果.第一个memset工作,第二个没有.我的代码:

// definitions
#define NUM_THREADS     1

enum ThreadState
{
    INITIALIZING,
    READY_TO_CALCULATE,
    CALCULATED,
    READY_TO_UPDATE,
    UPDATED
};


// Later on, in the code...
ThreadState Thread_States[NUM_THREADS];

// Somehow this works - after this statement, every entry in Thread_States is INITIALIZING
memset(Thread_States, INITIALIZING, NUM_THREADS* sizeof(ThreadState));

// ... later on (or even immediately right after) ...

// Failure - after this statement, every entry in Thread_States is 16843009
memset(Thread_States, READY_TO_CALCULATE, NUM_THREADS* sizeof(ThreadState));
Run Code Online (Sandbox Code Playgroud)

正如评论中所解释的那样,我第一次调用memset时,值被设置为我期望的值(INITIALIZING,即0).当我运行第二个语句时,我没有看到值设置为READY_TO_CALCULATE(即1).相反,当我检查调试器时,它们被设置为16843009.

有没有理由相对简单地使用memset的行为不一致?

谢谢.

Som*_*ude 9

memset函数将内存的每个字节设置为第二个参数(在第二个参数被截断后).由于枚举(通常),int您的大小将得到错误的结果.它唯一有效的时间是枚举值为零,因为它会将所有字节设置为零.

如果您使用如READY_TO_CALCULATE您将设置每个字节1,这将创造int的价值0x01010101,而不是0x00000001.