void CGomoriDlg::OnBnClickedButton1()
{
int mm=3,nn=9;
result_file.open("results.log");
double x[3][9]={{4,0,18,2,-3,6,1,0,0},
{5,0,24,-3,2,-2,0,1,0},
{6,0,36,1,3,-4,0,0,1}};
int k[9-3]={-3,-2,6,0,0,0};
int *K1=new int [nn-3];
int i;
for(i=0;i<nn-3;i++) K1=k;
double **X1=new double*[nn];
for(i=0;i<mm;i++) X1=new double[mm];
for(i=0;i<mm;i++)
for(int j=0;j<nn;j++) X1[j]=x[j];
Simplex(K1,X1,mm,nn);
result_file.close();
for(i=0;i<mm;++i) delete X1;
delete []K1; delete []X1;
}
void CGomoriDlg::Simplex(int *K1, double **X1, const int m,const int n)
{
double **X=new double*[n]; //на этом месте выскакивает ошибка
for(int i=0;i<n;i++) X=new double[m];
double *S=new double[n-3];
динамическое выделение памяти
Код:
После нажатия на кнопку постоянно выскакивает ошибка "Out of memory". Дебагер показал, что ошибка в указанном мной месте. Не могу понять, что не так?
То есть, вы выделяете склероз под массив в функции OnBnClickedButton1(), запихиваете туда значения, а потом, в функции Simplex, снова выделяете под нее память, затирая введенные значения?
Цитата: wanja
То есть, вы выделяете склероз под массив в функции OnBnClickedButton1(), запихиваете туда значения, а потом, в функции Simplex, снова выделяете под нее память, затирая введенные значения?
С этим в коде все нормально
Дальше в двойном цикле размерности массивов тоже перепутаны
Код:
int mm=3,nn=9;
double **X1=new double*[[COLOR="Red"]nn[/COLOR]]; // 9 указателей
for(i=0;i<[COLOR="#ff0000"]mm[/COLOR];i++) X1=new double[[COLOR="#ff0000"]mm[/COLOR]]; //из 9 указателей только для 3 созданы массивы, т.е., фактически, создана матрица 3*3
for(i=0;i<[COLOR="#ff0000"]mm[/COLOR];i++)
for(int j=0;j<[COLOR="#ff0000"]nn[/COLOR];j++) X1[j]=x[j]; //выход за границы массива (размерность 3, а перебор до 9)
double **X1=new double*[[COLOR="Red"]nn[/COLOR]]; // 9 указателей
for(i=0;i<[COLOR="#ff0000"]mm[/COLOR];i++) X1=new double[[COLOR="#ff0000"]mm[/COLOR]]; //из 9 указателей только для 3 созданы массивы, т.е., фактически, создана матрица 3*3
for(i=0;i<[COLOR="#ff0000"]mm[/COLOR];i++)
for(int j=0;j<[COLOR="#ff0000"]nn[/COLOR];j++) X1[j]=x[j]; //выход за границы массива (размерность 3, а перебор до 9)
ЗЫ Назовите нормально размерности - и сразу все будет видно
да да. Уже разобрался. Вопрос снят