Visual Studio Error

注意:文中所有“系统”用词,均指Windows Console操作系统IO


Debug Error 错误类型


#0表示调用约定错误

可以考虑在指针前面加上_stdcall。Dll库更新了,exe未更新也会报此错误。

#2表示栈溢出

-S是Stack around the variable … was corrupted的缩写

把12个浮点数数分配给整数数组的时候遇到了这个错误。错误一般都是指数组越界。

 

Stack around the variable … was corrupted的意思就是栈溢出。

可以看到,j小于12来做条件的时候,数组发生了栈溢出。原因是我定义的数组只有11个位置,如果j达到11的时候array[11]是不存在的,然而这种情况不同于未初始化的变量因为内存中数组只不过是一个位置与后面固定的长度,vs2015不会探测后方的内存是否在数组范围之内。导致的结果就是发生debug error#2错误。

#3表示使用了未初始化的变量

-T是The variable … is being used without being initialized的缩写

-T是The variable … is being used without being initialized的缩写。在switch case(或其他情况),case后方忘了break;就会出现#3报错。很明显day=31后面忘了break; 英文提示:the variable is being used without being defined(initialized)说的就是变量未定义,初始化的意思。

switch-case在内存中的运算方法和if-else是相同的。但是对于switch-case来说系统执行单减循环直至为零.

 

安装Visual Studio时登录等不上去的方法


  • 退了360!退了360!退了360!
  • 重新启动电脑
  • 重新打开安装程序
  • 把DNS修改为主选:114.114.114.114备选:8.8.8.8(参见360DNS优选)

分支条件没覆盖,不是所有分支都有返回值


什么叫分支条件没覆盖呢?比如if-else,两选一,肯定覆盖。比如if-else if,如果两个条件没满足,还有第三种可能,如果这种可能性处没有return,就认为没完全覆盖。

系统会默认后方还有一个空的else,然而这个else并没有return值。所以出现了C4715错误

 

项目加载失败。提示:该项目需要用户手动输入。


解决方法:

删除了原来的项目和文件夹,建立新的目录,问题即可解除

无法打开……进行写入


这其实是因为上一次运行的时候没有关闭,把上一个窗口关了,重新运行就没问题了

HANDLE hout的问题


为什么gotoxy函数没起作用?

事实上,HANDLE就是HANDLE的类型,上图中的HANDLE hout在main函数中相当于从新声明了hout,这样的话,hout对于main()来说就是局部变量。根据函数中局部变量会直接屏蔽全局变量的原则,这个赋值是对局部变量来说的。而gotoxy函数调用的是全局变量,此时全局变量是空的,因此gotoxy函数不会生效。

解决方法:

按照正常的赋值方法,这样全局变量hout就被正常的赋值了,可以看到此时gotoxy函数已经发挥了作用。这样一来又省去了把所有函数都加上HANDLE hout参数的麻烦。

 

warning MSB8028: The intermediate directory……


这个问题,和代码没有关系。原因在于重复建立了两个project指向了一个目录。

解决方法:

把需要的cpp拷贝出来,然后把这个项目删了(连文件夹都删掉)然后重新建立一个项目。再把cpp拷贝回去(虽然可以不拷贝,但是为了稳定,建议放在原文件夹。)再次运行,错误消失。

fatal error C1301: error accessing program database D:\Document\CPP_subject\School_asignments\Sudoku\Release\7-b6.ipdb, invalid format, please delete and rebuild

将模式改成x64,或者删除错误的文件

查错方法


如何判断数组越界?

现在故意犯了个错误,让最大为12的数组循环到30

程序崩溃,三号错误,表示数组越界。哪里越界?重新调试,但是这次只按F5。

 

调试程序报警,下方表明了错误位置。

点击中断,查看详细情况。

右侧明确的报出了出错的行数,而左侧则告知了异常位置,连内存地址都提供了出来。很明显i变成了随机数,month数组越界了。

说明一下,调试模式只会报出程序在哪一行终端,有时候错误的原因可能存在于其他位置,这个时候就要整理一下程序的思路沿着逻辑线索仔细查找。

还有一点说明。修改之后如果还报同样的错误,有可能是上一次的小黑窗没关

 

外部文件的函数如何查错?

遵循原则,返回什么,打印什么。

如果都是0,无法确定是那个0,就加几个自己认识的数字,就能快速区分出哪一个出的错。

 

Gotoxy函数失效?

Gotoxy函数无论如何也无法移动到指定位置,但是这一行的确执行了,原因是什么?

这一行的确是执行了,原因在于gotoxy函数的目标地点超出了控制台窗口的大小,这个时候此函数执行失败,系统自动继续读取。

循环次数超过预期导致显示混乱

类似于控制台打印时发生不可预知的错误,打印超过边界倒置自动换行出现混乱的形况,可以采用_getch()+打印循环次数的方法

采用类似方法可以把循环次数打印出来以及知道第几次循环出现了错误

 

这样一来随着每一步打印,都会出现类似于脚注的行列循环次数信。

 

使用不同的数据多次测试应用程序

对于同一个程序需要输入多组不同的数据进行测试的情况,可以考虑在程序开头和结束加入清屏和goto(或while(!))语句。

while(!){ …… }

System不明确

某处输入system(“pause”);后其他所有cout均会提示cout不明确

此时运行程序,不会提示任何错误

但是报错依旧存在

解决方法:

在头文件处包含#include<cstdlib>

问题得到解决

 

原本正常的控制台界面打印颜色出现排版混乱

错误的原因是因为控制台界面下方的中文输入法干扰了打印过程。

 
解决方法:
  1. 在进入正式打印结果的界面之前按shift(或其他按键)切换至英文输入法
  2. 规划窗口时为输入法预留一行空白,但不够美观

常见指针错误

野指针错误

对一个已经删除的地址进行访问,系统已经自动把指针指向的地址分配给其他内容。因此产生非法访问,报错

Debug Assertion Failed!

_finddata_t结构体产生错误

百度百科给的那个例子是错的,他是直接从stackoverflow上面抄来的别人的错例子。

原因在于

第一个if中的==优先级比=优先级高,_findfirst返回之后为假时发生判断短路

自动跳出if判断,此时handle句柄没有初值,导致下一步handle越界

既然这样解决方法也很简单了,加个括号或者把赋值放到long handle = _findfirst(file_path,&file_info);

常见指针越界

p=0xCCCCCCCC

0xCCCCCCCC就是我们常见的烫烫烫烫烫。一般是未初始化的字符串或者字符指针之类的

p=0x8123

0x8123是常见的指针错误,十有八九是

delete之后的指针复用了

因为指针在delete之后系统(很多时候)会把指针自动指向0x8123,一般情况下0x8123是不会作为程序数据的地址的

p=0x1110122

0x1110122一般是字符串·没strcpy进去,就是说

new方式出来的char ** p再次new char [] 得到的指针如果没赋值容易出现0x1110122 

超级可怕的报错方式,调试没错,没有弹框,没有debug error,绝对让你想破脑袋也找不出来的指针错误

*.exe has triggered a breakpoint

问题的答案吗,很简单

比如

char * p= new char [];
strcpy(p,""); ...
... delete p;

崩溃点一般是那个delete p;

发现了吗?strcpy()越界了

如果再进一步进入delete内部查看,你会发现卡在一个_freeDBG()的函数上

大概解释一下,最通俗的说其实delete内部就是从c语言对free各种肢解移植派生继承封装之后得到的,卡在某某free函数也就不奇怪了。

问题就是因为new那个地方越界了是编译不报错的,但是delete的时候触碰到了new之后外的内存保护区

(所以我每次new的时候都使用strlen(str)+2,管你少几个,多来一个字符也死不了人对吧。总比越界了没反应死磕三天三夜强)

p=0x00000004

exe升序越界访问了自己不能访问的内存

所以啊,没事别老盯着别人有自己没有的东西看,羡慕也羡慕不来

错误原因吗,我早就想不起来了,当时写的时候急着赶作业,只截了个图下来,等我哪天想起来再告诉你们

Visual Studio Error的更多相关文章

  1. Visual Studio error C2001:常量中有换行符(解决办法)

    在Visual Studio自动生成的项目中,碰见了一件关于文件编码的问题,集中在类似于以下的语句上: DASLog (DASProtWarn, L"(%s)消息超时,进入慢循环召唤模式.& ...

  2. 修复 Visual Studio Error “No exports were found that match the constraint”

    清空Visual Studio 文件缓存目录 Just delete or rename this folder: %AppData%\..\Local\Microsoft\VisualStudio\ ...

  3. visual studio 的Error List 显示乱码

    复制到右键菜单如下: Severity Code Description Project File LineError 閿欒: 绋嬪簭鍖卌om.baidu.lbsapi.auth涓嶅瓨鍦? com. ...

  4. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

    VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误.   解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  5. Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104

    Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 一.WINVER  Compile result:  WINVER not d ...

  6. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

      VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  7. DUIEngine使用Visual Studio 2010编译Debug_Dll版有关Error MSB3073错误解决方案

    在使用Visual Studio 2010编译DUIEngine的Debug_Dll版如果遇见如下错误: 错误 64 error MSB3073: 命令“copy D:\SomePath\DUIEng ...

  8. #error : Xiron Platform Abstraction Layer - Win32 - Microsoft Visual Studio versions above 2010 (10.0) are not supported! 解决方案

    OpenNI1.5 VS2013配置环境后,编译会出现这个错误: 错误 error C1189: #error : Xiron Platform Abstraction Layer - Win32 - ...

  9. NuGet Install-Package报错解决Package Manager Console error - PowerShell version 2.0 is not supported. Please upgrade PowerShell to 3.0 or greater and restart Visual Studio.

    问题: Package Manager Console error - PowerShell version 2.0 is not supported. Please upgrade PowerShe ...

随机推荐

  1. C#中如何判断线程当前所处的状态

    转自原文 在C#中如何判断线程当前所处的状态 在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象.    ThreadState 为线程定义了 ...

  2. Spring Boot启动流程详解

    注:本文转自http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow 环境 本文基于Spring Boot版本1.3.3, 使用了sp ...

  3. spring cloud zuul 配置(Robbin 和 熔断)

    #启动负载均衡的重试机制,默认falsespring.cloud.loadbalancer.retry.enabled=true#Hystrix是否启用超时时间hystrix.command.defa ...

  4. STL - Vector迭代器简单应用之计算元素和

    Description 用vector向量容器装入10个整数,然后,使用迭代器iterator和accumulate算法统计出这10个元素的和 Solution #include "stda ...

  5. redis centos7

    官网下载tar包 make 修改conf 修改 启动脚本 utils/redis_init_script 开放端口6379

  6. TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

  7. MonoBehaviour.print和Debug.Log是同样的作用

    MonoBehaviour.print("identical------------------------");

  8. JS回调函数深入篇

    <有些错别字> 在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中 ...

  9. Listview getItemViewType的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  10. Openssl pkeyutl命令

    一.简介 pkeyutl命令能够测试所支持的密钥算法的性能 二.语法 openssl rsautl [-in file] [-out file] [-sigfile file] [-inkey fil ...