Witam,
mam problem z programem mającym obrócić tablicę dynamiczną o 90 stopni. Program kompiluje się, działa poprawnie, gdy macierz jest kwadratowa, ale przy różnych współrzędnych przy wykonywaniu wyskakuje błąd (w załączniku). Domyślam się, że chodzi o jakiś wyciek pamięci w funkcji dokonującej obrotu, ale nie potrafię określić, w czym problem.
#include <stdlib.h>
#include <stdio.h>
void obrot(int i, int j, int r1, int r2, int **tab)
{
int **b;
b = (int**)malloc(r1 * sizeof (*b));
for (i = 0; i < r1; ++i)
{
b[i] = (int*)malloc(r2 * sizeof (**b));
}
for (i = 0; i < r1; ++i)
{
for (j = 0; j < r2; ++j)
{
b[i][j] = tab[i][j];
}
}
for (i = 0; i < r1; ++i)
{
for (j = 0; j < r2; ++j)
{
*(*(tab + j) + i) = b[r1 - 1 - i][j];
}
}
for (i = 0; i < r2; ++i)
{
for (j = 0; j < r1; ++j)
{
printf("%d\t", tab[i][j]);
}
printf("\n");
}
for (i = 0; i < r1; ++i)
free(b[i]);
free(b);
b = NULL;
}
int main()
{
int **a;//macierz
int rozmiar1, rozmiar2, i, j;
srand(time(NULL));
rozmiar1 = rand() % 7;
rozmiar2 = rand() % 5;
printf("wylosowany rozmiar tablicy: %d, %d\n", rozmiar1, rozmiar2);
a = (int**)malloc(rozmiar1 * sizeof (*a));
for (i = 0; i < rozmiar1; ++i)
{
a[i] = (int*)malloc(rozmiar2 * sizeof (**a));
}
for (i = 0; i < rozmiar1; ++i)
{
for (j = 0; j < rozmiar2; ++j)
{
a[i][j] = rand() % 99;
}
}
printf("kolejne elementy tablicy: \n");
for (i = 0; i < rozmiar1; ++i)
{
for (j = 0; j < rozmiar2; ++j)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
printf("\n");
obrot(i, j, rozmiar1, rozmiar2, a);
for (i = 0; i < rozmiar1; ++i)
free(a[i]);
free(a);
a = NULL;
return 0;
}