带2D阵列的段故障

带2D阵列的段故障

我不确定为什么二维数组初始化会导致段错误,所以我有

void viterbi_algorithm(double init[], double A[][26], double B[][2], int obs[],
                       int mostLikelyStates[]){


   cout << "start" << endl;


   double table1[26][68000];
   double table2[26][68000];

..

如果我注释掉两个表,一切都会好的。我是否要求太多回忆?

我运行gdb时的错误
Program received signal SIGSEGV, Segmentation fault.
___chkstk_ms () at /usr/src/debug/gcc-4.8.1-3/libgcc/config/i386/cygwin.S:146
146             orq     $0x0, (%rcx)            /* probe there */

最佳答案

使用关键字static定义这些数组

   static double table1[26][68000];
   static double table2[26][68000];

在这种情况下,它们将分配在静态存储器中。

另一种方法是使用标准容器std::vector
例如
   std::vector<std::vector<double>> table1( 26, std::vector<double>( 68000 ) );
   std::vector<std::vector<double>> table2( 26, std::vector<double>( 68000 ) );

您也可以使用关键字static定义它们
   static std::vector<std::vector<double>> table1( 26, std::vector<double>( 68000 ) );
   static std::vector<std::vector<double>> table2( 26, std::vector<double>( 68000 ) );

关于c++ - 带2D阵列的段故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21984999/

10-11 07:19