C++ 0x771CC7C9处未处理的异常(ntdll.dll)

C++ 0x771CC7C9处未处理的异常(ntdll.dll),c++,dynamic,C++,Dynamic,我有以下代码,其中数组在函数中动态声明。以下程序在Visual Studio 2013中完美编译。但是,在运行时,该代码在打印数组时中断,错误代码如下: 检测到严重错误c0000374 WaveEquation1D.exe已触发断点。 WaveEquation1D.exe中0x771CC7C9(ntdll.dll)处的首次偶然异常:0xC0000374:堆已损坏(参数:0x771F8890) WaveEquation1D.exe中0x771CC7C9(ntdll.dll)处未处理的异常:0xC0

我有以下代码,其中数组在函数中动态声明。以下程序在Visual Studio 2013中完美编译。但是,在运行时,该代码在打印数组时中断,错误代码如下:

检测到严重错误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;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
整数解算器(双i、双v、双c、双L、整数Nx、双C1、双t);
整数解算器(双i、双v、双c、双L、整数Nx、双C1、双t)
{
double*msh=新的double(Nx);
双增量=L/Nx;
整数计数=0;
对于(int i=0;i
应该是

double *msh = new double[Nx];
否则,您只是在1 double上分配一个指针

正如其他用户评论的那样,条件是错误的

for (int i = 0; i <= Nx; i++)

for(int i=0;i)此循环条件是错误的:
for(int i=0;i)您可能没有注意到
for
loops
i中的条件
for (int i = 0; i <= Nx; i++)
for (int i = 0; i < Nx; i++)
#include <vector>

std::vector<double> msh(Nx);  // instead of new double