环境:vs2013
1.内存访问冲突
思路:分析具体写入的地址具体是什么。一般是内存越界或者野指针、空指针。
拓展:字长即电脑同一时刻能够处理的二进制位数;一个地址代表一个字节!存储单元是字节级的。
数据总线:
用来传输各功能部件之间的实际数据信息,它是双向传输的,它既可以把CPU的数据传送到存储器或I/O接口等其它部件,也可以将其它部件的数据传送到CPU。这里的数据的含义是广义的,它可以是真正的数据,也可以是指令代码Q、状态信息或者其他。通常总线被设计成传送定长的 字节块,也就是字(word)。字中的字节数Q(即字长)是一个基本的系统参数,各个系统中都不尽相同。
数据总线的位宽等于CPU位宽等于CPU内部通用寄存器位宽。
地址总线:
- 地址总线是计算机系统中用于传输地址信息的一组物理线路。它决定了CPU可以寻址的内存地址范围,即CPU能够访问的内存空间大小取决于地址总线的宽度。
- 例如,一个拥有32根地址线的计算机系统,其地址总线宽度为32位,最大可寻址的内存空间为2^32(约4GB)。
- 地址总线负责将CPU发出的内存地址信号传送到内存模块,以便读取或写入数据。
注意:64位 32位指的是CPU寄存器的数据宽度,也叫CPU位宽,最主要区别为CPU一次能计算多少字节数据。32位系统内存为4g前提是cpu位宽等于地址总线位宽。Cpu位宽最好不要小于地址位宽,涉及到北桥数据转换?
控制总线:
传输控制或者状态信号,是双向的。一般传发送、接收,存储器读写、中断等信号。
2.无效异常
解决方法:暂无。
3.error C2664: “HMODULE GetModuleHandleW(LPCWSTR)”: 无法将参数 1 从“const char [9]”转换为“LPCWSTR
解决方法:Windows开发的函数命名规则,unicode版本的函数在函数名后加W,ansi则加A。需要在参数字符串前加L。
HMODULE hKernel32 = GetModuleHandle(L"kernel32");
其他方法为使用自适配版本,即LoadLibrary,字符串参数改为_T($YOUR_STRING$),_T()是一个宏,当程序定义为unicode时,相当于L,当程序定义为ansi时,则被忽略。
4.error C2664: “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char
解决方法:在项目->XX工程属性->项目配置,字符集选择为多字节字符集.
5..obj : fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
解决方法:看32位和64位的中间目录是不是一致。32和64位的中间目录都在.\Debug这个路径下,所以32位生成文件不适用于64位,故需重新生成。一个路径可能导致了这个问题。