Я написал программу, которая работает для большинства входных данных, но если я попрошу, чтобы она делала повышение точности с использованием большего массива (около 320x320 было, когда я начинал видеть проблемы), он сбой. Я искал свою проблему онлайн и нашел this similar problem и this tutorial о том, что с этим делать. Проблемная часть моего исходного кода ниже - у меня была точность = 320 и holepop = 770.Ошибка при попытке использовать кучу
double spacing = 2.0/(precision+1);
int lattice_int[precision][precision];
for (i=0; i<precision; ++i){
for (ii=0; ii<precision; ++ii){
mindist_sq = 2.0;
lattice_int[i][ii] = 0;
for (iii=0; iii<holepop; ++iii){
xdist = abs(xcoord[iii] + 1.0 - spacing/2 - spacing*i);
ydist = abs(ycoord[iii] - 1.0 + spacing/2 + spacing*ii);
thisdist_sq = xdist*xdist+ydist*ydist;
if (thisdist_sq < mindist_sq){
lattice_int[i][ii] = dint[iii];
mindist_sq = thisdist_sq;
}
}
}
}
Я попытался это исправить с этим изменением в первых двух строках:
int * lattice_int;
double spacing = 2.0/(precision+1);
lattice_int = new int[precision][precision];
(я поставил в "удалить lattice_int [] [];" в конце.) Тем не менее, я получил эту ошибку: «точность» не может возникать в постоянном выражении Это потому, что я пытаюсь работать с несколькими индексами? Что я могу сделать, чтобы обойти мою проблему? Спасибо!
'int lattice_int [precision] [precision];' требует 'precision' быть константой времени компиляции. Если вы используете 'new', это не так. Не имеет ничего общего с «несколькими индексами». несколько измерений. Edit: вы бы сделали 'new int [точность * точность];' для 'новой' версии, вместо' new int [precision] [precision]; 'как заметил @Puppy. Во всяком случае, придерживайтесь 'std :: vector', намного лучше. – nwp
Вы ошибаетесь. Если вы используете 'new []', то только первое измерение может быть непостоянным. – Puppy