_findnext访问冲突 // 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突 // x86转到x64平台编译错误

网上有很多出错的原因和解决办法,因人而异,但是我出错的原因,你可能没有了解过,高人指点我说,访问冲突一般是数组越界,指针那些。
我们要明白一点,很多变量在x86和x64位情况下大小是不一样的。我出错的原因就是用到了一个文件夹查找函数_findnext(long handle, struct _finddate_t *fileinfo),这个函数不用知道干嘛的,但是要知道的是:long型在x86和x64系统中大小均为4字节,但是指针在x86系统中大小为4字节,在x64系统中大小为8字节,然后这个函数内部可能是通过位操作,这个没有细查。总之在VS x64平台中使用这个函数时,就会造成函数变量为一个4位和一个8位,而在x86平台,两个变量均为4位。就是因为这个原因导致了程序报错。改正方法就是:

  • x86平台不报错,没问题。
long handle;//4字节
struct _finddate_t file_info;//其指针为4字节
...
_findnext(handle,&file_info);
  • x64位平台,将函数内部的输入变量提前定义为long long型,该变量为8字节,然后再赋值。
long long handle;//改为8字节 long long 型
struct _finddate_t file_info;//其指针也为8字节
...
_findnext(handle,&file_info);

访问冲突还有可能,这只是其中一个,因为平台变化或函数本身定义的问题,导致的变量字节大小不一致时报错。仅供参考,希望有用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值