c++程序运行常见错误

环境: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位,故需重新生成。一个路径可能导致了这个问题。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值