Napisałem prosty program wykorzystujący 2 funkcje do alokacji i zwalniania miejsca trzech dwuwymiarowych tablic, żeby przetestowac ich działanie zanim użyję ich w większym programie. Funkcja rezerwująca pamięc działa ok, ale nie mogę zwolnic pamięci przekazując parametry tablic do osobnej funkcji. IDE wyrzuca read access violation, a nie widzę gdzie w kodzie jest błąd.
#include "stdafx.h"
int main()
{
int dat[4];
int *wsk = dat;
int **m1 = 0, **m2 = 0, **mout = 0;
cout << "Podaj liczbe wierszy 1 tablicy" << endl;
cin >> dat[0];
cout << "Podaj liczbe kolumn 1 tablicy" << endl;
cin >> dat[1];
cout << "Podaj liczbe wierszy 2 tablicy" << endl;
cin >> dat[2];
cout << "Podaj liczbe kolumn 2 tablicy" << endl;
cin >> dat[3];
allocate(wsk, m1, m2, mout);
cout << endl << "Dynamiczna alokacja OK" << endl;
free(wsk, m1, m2, mout);
cout << endl << "Dynamiczne usuwanie danych OK" << endl;
_getch();
return 0;
}
int allocate(int *s, int **tab1, int **tab2, int **tab3)
{
int i, j;
tab1 = new int *[*s];
for (i = 0; i < *s; i++)
{
tab1[i] = new int[*(s + 1)];
cout << "Wiersz "<<i+1<<" zostal zalokowany pomyslnie"<< endl;
}
for (i = 0; i < *s; i++)
{
for (j = 0; j <*(s + 1); j++)
{
tab1[i][j] = 1;
cout << tab1[i][j] << " ";
}
cout << endl;
}
//2ga tab!
tab2 = new int *[*(s + 2)];
for (i = 0; i < *(s + 2); i++)
{
tab2[i] = new int[*(s + 3)];
cout << "Wiersz " << i + 1 << " zostal zalokowany pomyslnie" << endl;
}
for (i = 0; i < *(s + 2); i++)
{
for (j = 0; j <*(s + 3); j++)
{
tab2[i][j] = 1;
cout << tab2[i][j] << " ";
}
cout << endl;
}
//3cia tab!!!
tab3 = new int *[*s];
for (i = 0; i < *s; i++)
{
tab3[i] = new int[*(s + 3)];
cout << "Wiersz " << i + 1 << " zostal zalokowany pomyslnie" << endl;
}
for (i = 0; i < *s; i++)
{
for (j = 0; j <*(s + 3); j++)
{
tab3[i][j] = 1;
cout << tab3[i][j] << " ";
}
cout << endl;
}
return 0;
}
int free(int *s, int **tab1, int **tab2, int **tab3)
{
int i;
for (i = 0; i < *s; i++)
{
delete[] tab1[i];
}
delete[] tab1;
cout << "Tablica 1 usunieta pomyslnie" << endl;
for (i = 0; i < *(s + 2); i++)
{
delete[] tab2[i];
}
delete[] tab2;
cout << "Tablica 2 usunieta pomyslnie" << endl;
for (i = 0; i < *s; i++)
{
delete[] tab3[i];
}
delete[] tab3;
cout << "Tablica 3 usunieta pomyslnie" << endl;
return 0;
}