У вашего кода много проблем.
Во-первых, вы можете только free
что-то, что было выделено с malloc
, calloc
или realloc
.Это не относится к s[i][j]
.
Но это только одна проблема.Вы выделяете a
для хранения m
элементов:
int * a = (int*) malloc(m*sizeof(int));
, но затем пытаетесь записать после конца массива здесь:
int all=k*m;
for(i=m;i<all;i++)
{
a[i] = 0;
}
Вам необходимо изменить размер a
перед попыткой этого, в противном случае вы перезаписываете память, которой вы не владеете:
int *tmp = realloc(a, sizeof *a * all );
if ( !tmp )
{
// resize failed, exit with error
}
a = tmp;
for( i = m; i < all; i++ )
{
a[i] = 0;
}
Тогда есть это:
int j;
int n=0;
int s[i][j];
Какое значение j
на данный момент?В этом отношении, каково значение i
?Вы уверены, что не имеете в виду s[m][k]
?