Ho letto qualcosina sulle funzioni new/delete e i puntatori.
Andando un po' ad intuito ho provato a fare un programmino su array dinamici monodimensionali che racchiudesse le cose di cui ho bisogno nel mio programma sul sudoku, ossia generare un massimo di n nuovi array (per farlo ho creato un array di puntatori di dimensione n... si può fare?) di dimensioni note, richiamarli in funzioni ed eliminarli.
Probabilmente ci saranno errori concettuali, ma sembra funzionare. Ecco il codice.
- Codice:
#include <iostream>
void riempi_array(int v[5])
{
for(int i = 0; i < 5; i++)
{
std::cin >> v[i];
}
}
void mostra_array(int v[5])
{
for(int i = 0; i < 5; i++)
{
std::cout << v[i] << " ";
}
}
int main()
{
int n, *p[3];
for(int i = 0; i < 3; i++)
{
p[i] = new int [5];
}
riempi_array(p[1]);
mostra_array(p[1]);
std::cout << "n: ";
std::cin >> n;
std::cout << p[1][n];
for(int i = 0; i < 3; i++)
{
delete [] p[i];
}
}
riempiendo il secondo array dinamico per esempio con 4 7 13 54 32 e digitando n = 3 mi mostra 54, quindi anche se ci sono errori il programma fa quello che mi serve.
Il problema è che nel programma sul sudoku utilizzo array tridimensionali e provando a riscrivere il codice con la stessa logica usata nel programmino che ho postato sopra non mi compila.
ho provato quindi a restringere il campo modificando il precedente programma in array bidimensionali e lo stesso non compila.
- Codice:
#include <iostream>
void riempi_array(int v[5][5])
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
std::cin >> v[i][j];
}
}
}
void mostra_array(int v[5][5])
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
std::cout << v[i][j] << " ";
}
}
}
int main()
{
int n, *p[3];
for(int i = 0; i < 3; i++)
{
p[i] = new int [5][5];
}
riempi_array(p[1][1]);
mostra_array(p[1][1]);
std::cout << "n: ";
std::cin >> n;
std::cout << p[1][n][n];
for(int i = 0; i < 3; i++)
{
delete [] p[i];
}
}
Presumo quindi che per fare quello di cui ho bisogno con array a più dimensioni bisogna ragionare e/o scrivere diversamente, tipo utilizzare un puntatore per ogni array monodimensionale... Sto cercando in rete, ma non ho trovato ancora nulla. Quindi oltre a chiedervi se è corretto l'utilizzo dell'allocazione dinamica fatto nel programmino sugli array monodimensionali ne approfitto anche per chiedere delucidazioni per il caso di array pluridimensionali.
Chi dorme in democrazia, si sveglia in dittatura.