我在Visual Studio 2012 Express(当然是桌面版本)中创建了一个空的C++项目,并添加了一些随机的基本代码:
#include <cstdio>
#include <cstdlib>
typedef struct examplestruct
{
unsigned char num1;
unsigned short num2;
unsigned long num3;
unsigned long long num4;
} EXAMPLESTRUCT;
void examplefunction(unsigned long *num, int num2)
{
*num += num2;
return;
}
int main(int nArgs, char **pszArgs)
{
EXAMPLESTRUCT ExStructInstance = {0xFF, 0xFFFF, 0xFFFFFFFF, 0xFFFFFFFFFFFFFFFF};
printf("%d, %d, %u, %ull\n", ExStructInstance.num1, ExStructInstance.num2, ExStructInstance.num3, ExStructInstance.num4);
unsigned long num5 = ExStructInstance.num1 + ExStructInstance.num2;
printf("%d\n", num5);
examplefunction(&num5, 10);
printf("%d\n", num5);
system("pause");
return 0;
}
如果你对这是怎么回事感到困惑,我正在反汇编已创建的可执行文件以观察优化编译器的行为,并学习更多有关x86汇编的知识。
在项目设置中的链接器下,我选择了
Multi-threaded (/MT)
运行时库,以便进行静态链接。我使用F5编译并开始调试,立即收到一个消息框中的错误提示:
运行时错误! 程序:C:\Users\xxxxx\Documents\P... R6030 CRT未初始化
因此,由于某个与运行时库有关的问题,这个基本程序无法运行,但我无法找出原因!
有什么想法吗?我只是想知道这里发生了什么。提前感谢!
编辑:FYI,所有操作都是在发布模式下完成的。