Найти ошибку в коде с динамической матрицей
Нужно найти ошибку в коде. Нужно, чтобы она к примеру меняла матрицу -
000
000
000
000
000
000
000
000
000
на что-то типа такого -
111
111
111
000
000
000
000
000
000
Причем нужно чтобы матрица была динамической и общее число единиц в ней равнялось n^2, а n - это число вводимое с клавиатуры.
Из-за ошибки по итогу выводится такое -
111
110
100
000
000
000
000
000
000
Код самой программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n ;
printf("Vvedite znachenie n: ");
scanf("%d", &n);
int *a;
int i = 0;
int j = 0;
int k = 0;
a = malloc(4*n*n*n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < n; k++) *(a + i*n + j + k) = 1;
for (j = 0; j < n; j++)
for (k = 0; k < n; k++) *(a + 0*n + j + k) = 1;
for (i = 1; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < n; k++) *(a + i*n + j + k) = 0;
printf("Izmenenaya matrica\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
for (k = 0; k < n; k++)
{
printf("%d\t", *(a + i*n + j + k));
}
printf("\n");
}
printf("\n");
}
free(a);
return 0;
}
Помогите, пожалуйста, найти ошибку.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Замените все свои
a + i*n + j + k
на
a + i*n*n + j*n + k
У вас же трехмерная матрица, первый индекс выбирает очередные n^2 элементов двумерной матрицы, второй - строку в них, третий - столбец...