入力ファイルに基づいて動的配列を作成しようとしていて、gdcで有用な情報がないセグメンテーションフォールトエラーがスローされました。 デバッグ中にNtotが正しく読み込まれているかどうかを調べてみて、何とかエラーを修正しました。 coutを削除すると(例のように)、エラーが返されます。私がcoutを含んでいないと、セグメンテーションフォルト(コアダンプされた)ですか?
#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;
}
編集:作業配列の初期化は、次のとおり
double** number = new double*[5];
for (int i = 0; i < 5; i++)
number[i] = new double[Ntot];
なぜ、オハイオ州*なぜ*あなたがCで 'malloc'を使用しています++ ? – UnholySheep
境界外に割り当てられたメモリに書き込むため、未定義の動作が発生します。 C++では、インデックスは '0'から' size - 1'になります。 –
配列の最初の要素はインデックス0にあります。 'number [5]'にアクセスすると、未定義の動作が発生します。 –