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

标签 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;
}

最佳答案

double *msh = new double(Nx);

应该是

double *msh = new double[Nx];

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

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

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

应该是

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

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

#include <vector>

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

不需要删除,当然,当变量超出范围时,vector会自动处理释放。

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

关于c++ - 0x771CC7C9 (ntdll.dll) 处未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39324918/

相关文章:

c++ - 重载运算符=

c# - 如何在 .NET 中编写返回动态变量集的 Web 服务?

c++ - 如何释放函数内分配的任何动态内存?

javascript - jQuery 中使用变量的多个动态选择器

c++ - 阻止访问映射的网络驱动器

c++ - 我应该使用哪种浮点图像格式?

C++ : istringstream conversion to long int doesn't work

c++ - Clang++ 看不到 libc++

c# - 具有多个/未知条件的动态 linq 查询

java - 如何在多传感器网络中形成命令?