Ich arbeitete an der Erstellung eines dynamischen Arrays auf der Grundlage einer Eingabedatei und wurde ein segmentation Fehler Fehler ohne nützliche Informationen mit gdc geworfen. Während des Debugging habe ich versucht zu überprüfen, ob Ntot korrekt gelesen wurde und irgendwie hat das den Fehler behoben. Wenn ich den Cout entferne (wie im Beispiel), dann kommt der Fehler zurück, hat jemand einen Einblick warum?Segmentierungsfehler (Core Dumped), wenn ich keinen Cout einschließe?
#include <iostream>
#include <math.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main(){
double **number;
int i, Ntot;
ifstream input("initial_parameters.dat");
input >> Ntot;
//cout<<Ntot<<endl;
//uncomenting this removes the error
number = (double**)malloc(sizeof(double*) * (5));
for (int i = 1; i <= 5; i++)
number[i] = (double*)malloc(sizeof(double) * (Ntot));
number[1][1] = 1.;
cout<<number[1][1]<<endl;
number[2][1] = 2.;
cout<<number[2][1]<<endl;
number[3][1] = 3.;
cout<<number[3][1]<<endl;
number[4][1] = 4.;
cout<<number[4][1]<<endl;
number[5][1] = 5.;
cout<<number[5][1]<<endl;
return 0;
}
Edit: Initialisierung Array arbeitet, ist:
double** number = new double*[5];
for (int i = 0; i < 5; i++)
number[i] = new double[Ntot];
Warum, oh * warum * verwenden Sie 'malloc' in C++ ? – UnholySheep
Sie haben ein nicht definiertes Verhalten, weil Sie in den zugewiesenen Speicher außerhalb der Grenzen schreiben. Indizes gehen in C++ von "0" nach "Größe - 1". –
Das erste Element des Arrays befindet sich im Index 0. Der Zugriff auf 'number [5]' verursacht undefiniertes Verhalten. –