Ahoj,
jsem tu zase. Dodělávám úkol do školy, kde máme provést realokaci matice.
V hlavním programu si vytvořím novou Matici m1, kterou naplním náhodnými daty (z kódu je patrné, že rozměry matice m1 jsou 3 řádky a 4 sloupce):
Matice m1(3, 4);
for (int i = 0; i < 3; i++)
{
row = m1[i];
for (int j = 0; j < 4; j++)
row[j] = (i + 1) * (j + 4);
}
Tuto matici poté v hlavním programu měníme (resp. měníme její velikost) pomocí příkazu:
m1.realoc(5, 6);
kde 5 a 6 jsou nové počty řádků a sloupců změněné matice.
Zde je náhled aktuální podoby f-ce realoc pro třídu matice:
void Matice::realoc(int m_new, int n_new)
{
if ((m_new <= m) && (n_new <= n)) {
this->m = m_new;
this->n = n_new;
p = (int**)realloc(p, (m * n) * sizeof(int));
}
else
{
Matice mat(m_new, n_new);
for (int i = 0; i < m_new; i++)
{
for (int j = 0; j < n_new; j++)
{
mat[i][j] = 0;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
mat[i][j] = p[i][j];
}
}
}
}
}
}
Pokud při realokaci zadám rozměry menší, nebo rovné matici původní (tedy v našem případě <=3 a <=4, normálně proběhne operace:
p = (int**)realloc(p, (m * n) * sizeof(int));
problém nastává tehdy, když nastavím rozměry větší (např. 5, 6, jako v tom příspěvku). Zjistil jsem, že cykly mám asi poskládané dobře, protože po vypsání mat[i][j] se mi objeví toto:
což souhlasí (původní matice je 3x4, nová je 5x6, poslední dva řádky a sloupce jsou tedy naplněné nulami), ale problém je ten, že když použiji fci tiskMatice(&m1);, tak se mi vypíše matice původní (tedy nezměněná.
Potřeboval bych vědět, jak f-ci realoc změnit tak, abych z ní tu novou zvětšenou matici dostal a ona se vypsala napsáním tiskMatice(&m1).
Děkuji za odpovědi.