C++ 如果我不包括cout,分段错误(核心转储)?

C++ 如果我不包括cout,分段错误(核心转储)?,c++,segmentation-fault,C++,Segmentation Fault,我当时正在基于输入文件创建一个动态数组,结果被抛出了一个分段错误,gdc没有任何有用的信息。 在调试期间,我尝试检查Ntot是否被正确读取,并以某种方式修复了错误。 如果我像示例中那样删除cout,那么错误会返回,有人知道为什么吗 #include <iostream> #include <math.h> #include <fstream> #include <stdlib.h> using namespace std; int main()

我当时正在基于输入文件创建一个动态数组,结果被抛出了一个分段错误,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开始分配内存,因为C/C++中的索引从0开始,而不是从1开始

for (int i = 0; i < 5; i++)

为什么,为什么你在C++中使用MALOC?因为写在分配的内存之外,你有未定义的行为。在C++中索引从0变为1,数组的第一个元素位于索引0。访问数字[5]会导致未定义的行为。Ntot的值是多少?如果@UnholySheep Ntot是一个正整数值,你会怎么做?我正在使用1000 atmI尝试使用malloc作为替代,但在没有新代码的结果后,我更大的工作是基于C的原始代码,所以这里和那里有一些东西需要修复。做了你建议的更改后,我又一次出现了分段错误。我想你的问题已经解决了,请将答案标记为已接受@A.达克鲁里
number[i] = new double[Ntot];