aldorenati ha scritto:
Edit: ad esempio, cosa succede alla memoria che allochi in punt_x ad ogni passaggio? ci sono occasioni in cui il puntatore va "perso" rendendo irrecuperabile quella memoria (memory leak, hai presente)?
oh me ne ero proprio dimenticato di punt_x! Un utente all'inizio aveva detto che delete y cancellasse il dato, in realtà non è vero, l'array rimane corretto e si può verificare, io mi chiedo comunque se sia giusto deallocare y...
#include <iostream>
using namespace std;
int main()
{
int x = 0;
int n = 0;
int cont = 0;
bool b = false;
int *A[1000];
cout << "Dai una sequenza di numeri interi (negativo per smettere):" << endl;
try
{
do
{
cin >> x;
if (x < 0)
break;
int *punt_x = new int;
for (int i = 0; i < cont; i++)
if (*A[i] == x)
{
b = true;
punt_x = A[i];
break;
}
if (b == false)
{
delete punt_x;
int *y = new int(x);
A[cont] = y;
delete y;
n++;
}
if (b == true)
A[cont] = punt_x;
b = false;
cont++;
}
while (true);
} catch (...) {cout << "Errore" << endl;}
cout << endl;
cout << "Allocate " << n << " variabili" << endl;
cout << "Sequenza: ";
for (int j = 0; j < cont; j++)
cout << *A[j] << " ";
cout << endl;
for(--cont; cont >= 0; --cont) //"distruttore"
delete A[cont];
return 0;
}
Sai questo è il primo esercizio con i puntatori e sto iniziando a capirci qualcosina, grazie ancora per l'aiuto
+m2+ ha scritto:
"A naso" vuole una specie di lista, mantenuta però dentro un array.
Essenzialmente sarà l'allocazione sullo heap della variabile (cosa inutile, ma didatticamente estensibile ad esempio in una struttura).
Nel contesto direi che "variabile dinamica" è... una variabile intera, allocata dinamicamente, il cui puntatore viene "serbato" all'interno del vettore.
In una situazione del genere (tipica del mondo OO) dovrai fare attenzione ai leak della memoria, e fare anche una sorta di "distruttore" (cioè una funzione che dealloca le variabili insieme -prima- alla struttura principale, quando quest'ultima "muoia").
Comunque in realtà tu avevi capito bene l'esercizio e me lo avevi pure spiegato bene solo che non avevo capito io la tua risposta ahah