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

时间:2016-09-05 06:26:49

标签: c++ dynamic

我有以下代码,其中一个数组是在一个函数中动态声明的。以下程序在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;
}

1 个答案:

答案 0 :(得分:5)

double *msh = new double(Nx);

应该是

double *msh = new double[Nx];

否则你只是在1双上分配一个指针。

其他用户评论

时情况有误
for (int i = 0; i <= Nx; i++)

应该是

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

更好的解决方案:声明一个double的向量

#include <vector>

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

当然,当delete变量超出范围时,vector无需自动处理释放。

并使用msh.at(i)访问您的元素,因此如果向量超出范围,则会引发断言(性能受到影响,但也会出现错误)