一、Visual Studio 常见错误
1、添加_CRT_SECURE_NO_WARNINGS
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
如下:
#define _CRT_SECURE_NO_WARNINGS
或者是在:
在文件开头添加 #define _CRT_SECURE_NO_WARNINGS
在 项目->属性->C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_WARNINGS
2、error C4703:
问题描述:
在用VS2013编译时出现下面的错误:error C4703: 使用了可能未初始化的本地指针变量“xxx”
问题分析:在VS2013创建项目时,会有一个勾选项,叫做“安全开发生命周期(SDL)检查”,这个东西是微软在VS2013新推出的东西,为了是能更好的监管开发者的代码安全,如果勾选上这一项,那么他将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译,比如在VS2010中的scanf是warning那么在VS2013中就是error了。
解决方法:
有一个选择打开和关闭SDL检查的位置就是:项目属性->配置属性->C/C++->SDL检查,选测是或者否。
此时我们选择”否”,则上面的那个错误就不会出现了。或者将指针变量初始化为nullptr,也可以解决。
3、 C3861 “system”: 找不到标识符
关于“system”: 找不到标识符问题和“包括”/“排除”设置禁用了加载功能的问题
这个问题主要是使用system("pause");时造成的,
可以删除或者注释这个语句试试,解决办法:
1.添加头文件stdlib.h
2.添加iostream.h
4、 0xC0000005: 读取位置 xxx时发生访问冲突
一般是访问了不属于自己的内存空间;
比如说:1、数组越界了;2、指针在使用前被提前释放;
常见的溢出主要有:
1、内存分配未成功,却使用了它。
常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p 是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc 或new 来申请内存,应该用if(p==NULL)或if(p!=NULL)进行防错处理。
2、内存分配虽然成功,但是尚未初始化就引用它。
内存分配成功并且已经初始化,但操作越过了内存的边界。
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for 循环语句中,循环次数很容易搞错,导致数组操作越界。
3、使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
二、Visual Studio 常用快捷键
1、代码注释和取消注释
注释:ctrl+k, ctrl+c
取消注释:ctrl+k,ctrl+u
2、格式化代码:
ctrl+k,ctrl+f
3、代码段缩进
增加缩进:选中代码区域,点击Tab
减少缩进:选中代码区域,点击Shift+Tab
参考链接:
error C4703: 使用了可能未初始化的本地指针变量“xxx”
在 Visual Studio 中设置当发生某个特定异常或所有异常时中断
C++“读取位置 0x****** 时发生访问冲突”的可能原因
没有躲过的坑--0xC0000005: 读取位置 xxx时发生访问冲突