使用 virtualalloc 时我有一些奇怪的行为。我在 c++,Visual Studio 2010 中。
我有两件事要分配,我正在使用 VirtualAlloc(我有我的理由,与问题无关)
1 - 存放 x86 汇编代码缓冲区的
空间 2 - 存放 x86 代码所需数据结构的空间
在我的代码中,我正在做:
thread_data_t * p_data = (thread_data_t*)VirtualAlloc(NULL, sizeof(thread_data_t), MEM_COMMIT, PAGE_READWRITE);
//set up all the values in the structure
unsigned char* p_function = (unsigned char*)VirtualAlloc(NULL, sizeof(buffer), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(p_function, buffer, sizeof(buffer));
CreateThread( 0, (LPTHREAD_START_ROUTINE)p_function, p_data, 0, NULL);
在 DEBUG 模式下:
在 RELEASE 模式下工作正常:旋转的线程接收 null 作为其输入数据。通过调试验证,当我调用 createThread 时指针是正确的
如果我切换 VirtualAlloc,以便在数据空间之前分配函数空间,那么 DEBUG 和 RELEASE 模式都可以正常工作。
任何想法为什么?我已经验证了我所有的 VS 构建设置在 DEBUG/RELEASE 之间都是相同的