如果我不包括cout,则会出现分段错误(核心转储)?

时间:2016-11-30 16:52:18

标签: c++ segmentation-fault

我正在创建一个基于输入文件的动态数组,并且正在抛出一个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];

1 个答案:

答案 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];