gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:50 25 4
gpt4 key购买 nike

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

检测到严重错误 c0000374WaveEquation1D.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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com