我正在創建基於輸入文件一個動態數組,並被拋出分段錯誤與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;
}
編輯:工作數組初始化是:從索引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]'會導致未定義的行爲。 –