我正在创建基于输入文件一个动态数组,并被抛出分段错误与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]'会导致未定义的行为。 –