Доброго времени суток. Пишу программу, удаляющую строки из двумерного массива, в которых есть хотя бы один локальный максимум (элемент, больший всех своих соседей). Но программа крашится уже на этапе выделения памяти. Ввожу количество строк, потом столбцов, и происходит слёт. С фиксированной памятью работает, хоть и не удаляет строки. А мне нужна программа, работающая именно с динамической памятью. Подскажите студенту, пожалуйста. Вроде, элементарная задачка, но уже вызывает столько проблем.
Код:
#include <stdio.h>
#include <stdlib.h>
int del (int **a, int m, int n)
{
int h, i, j, l, k;
k=0;
int *b=(int*)malloc(m*sizeof(int));
if (b==NULL)
printf("\nCan't create massive");
for(i=0;i<m;i++)
{
h=0;
if(i==m-1)
{
for(j=0;j<n;j++)
if (j==n-1)
{
if(a[i][j]>a[i][j-1] && a[i][j]>a[i-1][j])
h++;
}
else
switch (j)
{
case (0):
{
if(a[i][j]>a[i][j+1] && a[i][j]>a[i-1][j])
h++;
break;
}
default:
{
if(a[i][j]>a[i][j+1] && a[i][j]>a[i-1][j] && a[i][j]>a[i][j-1])
h++;
break;
}
}
if(h!=0)
{
b[k]=i;
k++;
}
}
else
switch (i)
{
case (0):
{
for(j=0;j<n;j++)
if (j==n-1)
{
if(a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j])
h++;
break;
}
else
switch (j)
{
case (0):
{
if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j])
h++;
break;
}
default:
{
if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i][j-1])
h++;
break;
}
}
if(h!=0)
{
b[k]=i;
k++;
}
break;
}
default:
{
for(j=0;j<n;j++)
if (j==n-1)
{
if(a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j])
h++;
}
else
switch (j)
{
case (0):
{
if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j])
h++;
break;
}
default:
if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i][j-1])
h++;
break;
}
if(h!=0)
{
b[k]=i;
k++;
}
break;
}
}
}
for(l=0;l<k;l++)
{
for(i=b[l];i<m-1;i++)
for(j=0;j<n;j++);
a[i][j]=a[i+1][j];
free (a[m-1]);
m--;
}
free (b);
}
int main()
{
int i, j, m, n;
int **a;
printf("Type number of strings: ");
scanf("%d", m);
printf("\nType number of columns: ");
scanf("%d", n);
a=(int**)malloc(m*sizeof(int*));
if(a==NULL)
printf("\nERROR");
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));
if(a==NULL)
printf("\nERROR");
printf("\nType elements of matrix:\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d", &a[i][j]);
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d", a[i][j]);
}
del(a,m,n);
printf("\nResult is\n");
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d", a[i][j]);
}
for(i=0;i<m;i++)
free (a[i]);
free (a);
getch();
return 0;
}