QT 2d列表导致段错误

时间:2010-03-09 22:08:41

标签: c++ qt qt4

我有一个直到最近才开始工作的程序。违规代码如下所示:

void writeTimeInfo(fitsfile *fptr, QList<QList<double> > &in)
{
 double data[in.size() * in[0].size()];
 long naxes[2];
 int status = 0;

 naxes[1] = in.size();
 naxes[0] = in[0].size();

 for (int i=0; i<naxes[1]; i++)
 {
  for (int j=0; j<naxes[0]; j++)
  {
   data[j+i*naxes[0]] = in[i][j];
  }
 }


 fits_insert_img(fptr, DOUBLE_IMG, 2, naxes, &status);
 fits_write_key(fptr, TSTRING, "EXTNAME", (void*)"HJD", "Extension name", &status);
 fits_write_2d_dbl(fptr, 0, naxes[0], naxes[0], naxes[1], data, &status);

 if (status)
  fits_report_error(stderr, status);
}   

该程序的细节并不重要(所有适合的东西,它用于操纵天文标准拟合文件),但目前程序段错误就行了

naxis[1] = in.size();

我看不出有什么问题 - 在此步骤之前我可以使用gdb查看in.size()和[0] .size()*两个数组维度)并检查数组值。这只是段落错误。

in是一个2d QList数组,您可以通过函数参数列表看到。数组通过引用传递,以便不重复内存。我所做的唯一改变是在更大的输入集上运行程序,其中before(工作阶段):in是一个515 * 1508元素的2d双数组,而现在它是一个515 * 2480元素的数组。可能是堆栈上没有足够的内存吗?

干杯

1 个答案:

答案 0 :(得分:1)

515 * 1508 doubles的数组大约是6MB - 堆栈很多。这可能是一个stackoverflow。尝试使用--stack的{​​{1}}选项设置堆栈限制为~10 MB(如果可能),并使用值515 * 2480进行测试。

在Windows上,使用VS2010 Beta,以下内容会崩溃堆栈:

ld

在堆上创建数组。如果您可以使用Boost,请使用int main() { double x[ 515 * 1508 ]; }