У меня есть двумерный динамический массив, состоящий, например, из 2 строк и 3 столбцов:
1 2 3
4 5 6
Суть задачи: перевернуть наш исходный массив на 90 градусов, то есть в нашем случае сделать массив из 3 строк и 2 столбцов:
4 1
5 2
6 3
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, M;
int **array;
int **newArray;
printf("Введите числа N и M: ");
scanf("%d %d", &N, &M);
array = (int **)malloc(N * sizeof(int));
for (int i = 0; i < N; i++) {
array[i] = (int *)malloc(M * sizeof(int));
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
printf("array[%d][%d] = ", i, j);
scanf("%d", &array[i][j]);
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
printf("\n");
newArray = (int **)malloc(M * sizeof(int));
for (int i = 0; i < M; i++) {
newArray[i] = (int *)malloc(N * sizeof(int));
}
printf("%d %d \n", M, N);
for (int i = 0; i < M; i++) {
int n2 = N - 1;
for (int j = 0; j < N; j++) {
newArray[i][j] = array[n2][i];
printf("%d ", newArray[i][j]);
n2--;
}
printf("\n");
}
}
Заполнение первого массива при указанных выше параметрах происходит без проблем, второй массив поначалу тоже спокойно заполняется, но на 3 строке нового массива вылетает segmentation fault 11. Если я забиваю в первоначальный массив 3 строки и 2 столбца, то та же ошибка вылетает после заполнения 5 из 6 ячеек.
Если я выделяю под оба массива в 2 раза больше памяти, всё работает нормально.