网上有很多出错的原因和解决办法,因人而异,但是我出错的原因,你可能没有了解过,高人指点我说,访问冲突一般是数组越界,指针那些。
我们要明白一点,很多变量在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);
访问冲突还有可能,这只是其中一个,因为平台变化或函数本身定义的问题,导致的变量字节大小不一致时报错。仅供参考,希望有用。