我是C ++的新手,我正在尝试用C ++编写程序。以下是我的代码。说到评论//PROGRAM crashes
指示的行,程序崩溃并发出此错误:Process returned -1073741819 (0xC0000005)
。
#include <iostream>
#include <cmath>
#include <fstream>
#include <cassert>
using namespace std;
int main (int argc, char* argv[])
{
double simTime = 5;
double r = 0.9;
double t, F = 1;
int i, counter = 0;
int n = 100;
double* u_n = new double[n];
double* u_n_minus_one = new double[n];
double* u_n_plus_one = new double[n];
for (i=0;i<n;i++)
{
u_n[i]=0;
u_n_minus_one[i]=0;
u_n_plus_one[i]=0;
}
std::ofstream fw1("Values.txt");
assert(fw1.is_open());
for (t = 0; t <= simTime; t = t + 0.5)
{
for (i = 1; i <= (n-2); i++)
{
u_n_plus_one[i] = pow(r, 2) * (u_n[i-1] + u_n[i+1]) + 2 * (1 - pow(r, 2)) * u_n[i] -u_n_minus_one[i];
}
u_n_plus_one[0] = 0;
u_n_plus_one[int(floor((n)/2))] = F;
u_n_plus_one[n-1] = 0;
for (i=0;i<n;i++)
{
u_n_minus_one[i] = u_n[i];
}
for (i=0;i<n;i++)
{
u_n[i] = u_n_plus_one[i];
}
fw1.precision(6);
//PROGRAM crashes here.
for (i=0; i<n; i++)
{
fw1 << u_n_plus_one[i] << '\t';
}
fw1 << std::endl;
fw1.close();
delete[] u_n; delete[] u_n_plus_one; delete[] u_n_minus_one;
}
}
我用Code :: Blocks调试器找到了这个崩溃位置。基本上,当我尝试进一步调试时,即获取数组u_n_plus_one
的内容,程序崩溃。
Code :: Blocks调试器似乎没有给出数组的内容。我有以下与该计划相关的具体问题。
我非常感谢任何帮助。
答案 0 :(得分:1)
原因很简单。您正在关闭文件并处理所有变量,同时仍在循环for (t=0;t<=simTime;t=t+0.5)
内。
第一次完成循环是可以的,第二次在使用已删除的所有变量并尝试写入已关闭的文件时调用未定义的行为。
如果您正确缩进代码,所有这些都很容易被发现。看起来很重要!
答案 1 :(得分:1)
您正在删除变量并在for循环中关闭fw1。你可能打算:
}
delete[] u_n; delete[] u_n_plus_one; delete[] u_n_minus_one;
fw1.close();
}