2016-09-05 6 views
2

Ich habe den folgenden Code, in dem ein Array dynamisch in einer Funktion deklariert wird. Das folgende Programm kompiliert perfekt in Visual Studio 2013 jedoch während der Laufzeit der Code Pausen während des Druckens das Array mit dem folgenden Fehlercode:Unbehandelte Ausnahme bei 0x771CC7C9 (ntdll.dll)

Kritischer Fehler erkannt c0000374 WaveEquation1D.exe einen Breakpoint ausgelöst hat. Erste-Chance-Ausnahme bei 0x771CC7C9 (ntdll.dll) in WaveEquation1D.exe: 0xC0000374: Ein Heap wurde beschädigt (Parameter: 0x771F8890).

Unbehandelte Ausnahme bei 0x771CC7C9 (ntdll.dll) in WaveEquation1D.exe: 0xC0000374: Ein Heap beschädigt wurde (Parameter: 0x771F8890).

Was ist los? Bitte helfen

#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; 
} 
+0

Diese Schleife Bedingung ist falsch: 'for (int i = 0; i < = Nx; i ++) '. Ihr Array hat 'Nx' Elemente, Sie drucken' Nx + 1' – Ari0nhh

Antwort

5
double *msh = new double(Nx); 

sollte

double *msh = new double[Nx]; 

sonst sind Sie nur einen Zeiger auf 1 Doppel zuordnet.

und der Zustand ist falsch, wie andere Benutzer

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

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

bessere Lösung sein sollte:

#include <vector> 

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

keine Notwendigkeit, delete einen Vektor von Doppel

erklären, von Natürlich behandelt vector die Freigabe automatisch, wenn die Variable g oes außerhalb des Geltungsbereichs.

und Zugriff auf Ihre Elemente mit msh.at(i) also, wenn Vektor außerhalb der Grenzen eine Behauptung geht angehoben wird (Leistung leidet ein wenig, aber Fehler zu)

+1

Sie haben wahrscheinlich nicht die Bedingung in 'for' Schleifen' i <= Nx; 'bemerkt, es sollte' i

+0

2 Fehler !! Du hast recht. –

Verwandte Themen