У меня есть программа, которая работала до недавнего времени. Оскорбительный код показан здесь:
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 () и in [0] .size () * двух измерений массива), и я проверил значения массива. Это просто segfaults здесь.
in
- это двумерный массив QList, как вы можете видеть из списка аргументов функции. Массив передается по ссылке, чтобы не дублировать память. Единственное изменение, которое я сделал, - это запуск программы на большем входном множестве, чем раньше (рабочая стадия): в 2-х элементном двойном массиве из 515 * 1508 элементов, тогда как теперь это массив из 515 * 2480 элементов. Может быть, в стеке недостаточно памяти?
Приветствия