配列が関数内で動的に宣言される次のコードがあります。次のプログラム、次のエラーコードで、配列を印刷中に、コードの切断を実行時に、しかしVisual Studioの2013年に完全にコンパイルされます。重大なエラーが検出さ0x771CC7C9(ntdll.dll)の処理されない例外
c0000374 WaveEquation1D.exeは、ブレークポイントをトリガしました。 WaveEquation1D.exeの0x771CC7C9(ntdll.dll)の最初の例外:0xC0000374:ヒープが破損しました(パラメータ:0x771F8890)。 WaveEquation1D.exeで0x771CC7C9(NTDLL.DLL)で
未処理の例外:0xC0000374:ヒープは(:0x771F8890パラメータ)破損しています。
何が起こっているのですか?
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int solver(double i, double v, double c, double L, int Nx, double C1, double t);
int solver(double i, double v, double c, double L, int Nx, double C1, double t)
{
double *msh = new double(Nx);
double delta = L/Nx;
int count = 0;
for (int i = 0; i <= Nx; i++)
{
msh[i] = 0.0;
}
for (int i = 0; i <= Nx; i++)
{
msh[i] += delta*count;
count++;
}
for (int i = 0; i <= Nx; i++)
{
cout << msh[i] <<endl;
}
delete[] msh;
//
return 0;
}
int main()
{
cout << "Hello"<<endl;
int size;
int j;
j = solver(1, 0, 0, 20.0, 20, 0, 1);
_getch();
return 0;
}
(パフォーマンスがあまりにもビットを受けるが、バグ)のベクトルが範囲外になった場合、アサーションが発生しますので、
msh.at(i)
であなたの要素にアクセス: '(I = 0をint型のために、私は< = Nx; i ++) 'となる。あなたの配列は 'Nx'要素を持っていて、' Nx + 1'を出力しています – Ari0nhh