错误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型中间变量解决这个问题。
posted @ 2019-01-14 12:58  yix  阅读(4999)  评论(0编辑  收藏  举报