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的行为不一致?
谢谢.
该memset函数将内存的每个字节设置为第二个参数(在第二个参数被截断后).由于枚举(通常),int您的大小将得到错误的结果.它唯一有效的时间是枚举值为零,因为它会将所有字节设置为零.
如果您使用如READY_TO_CALCULATE您将设置每个字节1,这将创造int的价值0x01010101,而不是0x00000001.