0xC0000005:写⼊位置0x00000000时发⽣访问冲突的解决办法(转)
上⾯的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量)
(1)最简单也最直接的错误可能就是scanf()的问题,我们都知道输⼊的时候都是scanf("%格式",&变量),那么除了字符串(可要&,可不要)之外,所有的输⼊都需要&,
如果你丢了,在很多编译器上变异的时候是查不出来的,也就是说是没有错的,但是输⼊数据会差⽣上述错误,是因为写成scanf("%格式",变量)这种形式了,这样你所输⼊的变量就不知道会存储到哪⾥。
(2)空指针赋值的问题。
我们知道如果某⼀个指针是空的是不能直接给他赋值的原因是空指针不知道指得什么东西,那么他没有固定的内存,现在你给他赋值,通俗点理解就是他不知道该怎么存,也不知道存在哪,也不会储存,但是现在你有需要让他存储,那么就会出现上述的问题,这时候解决办法就是重新申请空间(⽤malloc或者new),或者是你尽量避免他成为空指针,或者是当他有成为空指针的可能性时,你就单独讨论。
下⾯⼏个例⼦就是有可能的:
下⾯的语句会出这个问题
int * p = 0;
p[0] = 100;
当然,实际代码中不可能这么明显,这只是⼀个例⼦,可能相似,这得你⾃⼰好好看看,上⾯的0实际上和NULL是⼀样的,这就是空指针赋了值。
下⾯这种写法也会产⽣问题
a=(double*)malloc(sizeof(double)*6);
h=...... 
a[0]=h;  //未判断a是否为空,就去使⽤很危险.
⾸先你不知道malloc是否会成功如果失败的话返回的恰好是NULL ⼀般情况下你分配这么点内存是不会失败的但是正如你说的⼏个循环过后你可能没free 内存耗尽或者产⽣碎⽚ malloc失败了
你⼜没判断那么恰好问题就是给空指针赋值产⽣异常
下⾯的三种指针情况是⽹上的:⼤家可以根据⾃⼰的情况和他的对照着看看:
可能性3种
1:
char *p;
字符串转数组 csdnp = new char[number];
delete [] p;
....
// always
p = xxx; // access violation
2:
char *p; //随机指向⼀个位置,可能会出问题.
memcpy(p, xxx, number); // access violation
3:
char *p;
p = new char[number];
delete [] p;
.........
delete [] p; // access violation
0xC0000005: Access Violation错误调试- -
补充⼀句话:(1)编译时没有问题
(2)运⾏时是⼀个循环计算,设置断点,前⼏个循环都没有问题,到其中某⼀个循环(循环结束条件还没有达到)会出现上述问题。
这时候肯定就是你在哪⼀步中间将空指针赋了值。
(3)数组或者指针越界
只要是和内存相关的基本都是有可能的,当然数组或是指针越界,这个也是很常见的,这个就不举例⼦了,相信⼤家都能理解什么意识,也知道怎么解决,这个就需要⼤家⽐较⼩⼼和仔细了。————————————————
版权声明:本⽂为CSDN博主「中华丛迅」的原创⽂章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/hhq420684/article/details/18181099

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。