错误error: Exception at 0x613baa14, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)的解决办法

时间:2023-03-09 17:28:32
错误error: Exception at 0x613baa14, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)的解决办法

一.错误原因

出现这个错误的原因多半是由于指针出现错误,即出现了空指针,也有说是变量没有初始化,笔者碰到的情况是发生了内存溢出。

二.定位方法

一般这种问题直接导致程序崩溃,直接调试,就能找到对应的问题函数A,仔细检查一下指针变量就能找到原因。事实上有可能出现问题的地方并不是报错的函数A,笔者出现的问题就是,报错的函数A中调用的另一个函数B出现了问题,最后B调用结束,才抛出错误,所以调试器将错误定位到了函数A中B调用结束的下一行。

三.具体错误

在函数B中,笔者使用了sscanf_s(ptr,"%d",&num) 函数,为了节省空间,num申请的是unsigned char类型。事实上正是这个函数出现了问题,%d默认传入的变量是int类型,因此导致了内存溢出。这种问题需要编程时多加注意。

附: 关于sscanf_s的陷阱

```
#include
typedef struct AA
{
unsigned char a;
unsigned char b;
}SAA;
int main(int argc, char *argv[])
{
SAA var;
char s[]="10";
var.a=1;
var.b=2;
sscanf_s(s,"%hhu",(unsigned char*)&var.a,sizeof(var.a));//在给var.a赋值时,影响了var.b
printf("%hhu %hhu",var.a,var.b);//预期输出10 2,实际输出10 0;
return 0;
}
```
这个可能与编译器有关,sscanf_s处理%hhu仍当4个字节出处理,故覆盖了var.b的值,可使用int型中间变量解决这个问题。