Webots与VS仿真,报错Debug Assertion Failed!(关于文件写入程序)

这个错误的主要原因是因为咱们使用的win10 专业版 VS2017 使用fopen()、fwrite()、fread()、fclose()函数的版本的问题,建议大家解决的思路是最好单步调试,找到崩溃的地方,找到那一行是不是出现问题的地方。

问题一:

特征:程序编译没有出现任何的问题
编译时刻 0错误,0警告,运行时刻弹出警告消息框;
在这里插入图片描述
运行时候出现以错误:
在这里插入图片描述

在这里插入图片描述
原因:1.函数过于旧,不安全。
2.代码逻辑有问题 或者 函数参数写错了(大小写, 符号中文等)

在这里插入图片描述
解决方式:1.运行环境需要设置,fopen()函数已经被新的fopen_s()取代,仍然使用需要修改一处环境
在如图的地方复制添加这句话 _CRT_SECURE_NO_WARNINGS 在最下面 然后点击保存即可以:在这里插入图片描述
再次运行,恭喜; 没有错误,也不会运行崩溃了。

问题二:

另外遇到一个的问题是出现Debug Assertion Failed!的情况:vector容器越界的问题,这个我查了很久的程序才解决。
在这里插入图片描述

首先明确vector的初始化必须放在构造函数内初始化
查找程序中vector的变量地方,找到可能越界的变量情况。

std::vector<std::string> blah(n); // Vector of size n will be declared
blah[j] = strInput; // 0 <= j < n

例如这个当中的blah,范围值只能在以内,对于没有初始化容器数目的需要利用reverse函数再次重新定义大小,防止出现溢出的情况。

// vector::at
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector (10);   // 10 zero-initialized ints

  // assign some values:
  for (unsigned i=0; i<myvector.size(); i++)
    myvector.at(i)=i;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); i++)
    std::cout << ' ' << myvector.at(i);
  std::cout << '\n';

  return 0;
}

这是一个简单的例子,需要弄明白i的范围是多少,防止出现超了的情况。大家需要自己具体问题具体分析,找到问题所在 尤其要注意数组的越界情况,合理初始化。尤其要注意单步调试的重要性,定位到出问题的函数的位置,在查找原因。

心得: 先看是不是环境的原因(配置库等), 然后单步运行,到第一次崩溃的地方,重点检查是不是哪一行出现实大意的错误,上图弹出Debug Assertion Failed!的图片上面也显示了出现错误的函数原因,主要是fclose.cpp出现问题了。

感谢博主:偕臧x的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值