我正在创建一个基于输入文件的动态数组,并且正在抛出一个Segmentation fault错误,gdc没有有用的信息。 虽然调试我尝试检查是否正确读取Ntot并以某种方式修复了错误。 如果我删除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];
答案 0 :(得分:1)
从索引0开始分配内存,因为C / C ++中的索引是从0而不是1。
for (int i = 0; i < 5; i++)
此外,在上面的所有i
中将i - 1
替换为number[i][j]
。与number[1][1] = 1.
number[0][1] = 1.
之类似,等等。
而且,不要使用malloc
(也不要输入结果!),而是使用new
:
number[i] = new double[Ntot];