这个错误的主要原因是因为咱们使用的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的分享