Cosa significa variabile dinamica?

di il
33 risposte

33 Risposte - Pagina 2

  • Re: Cosa significa variabile dinamica?

    Ho capito grazie mille, hai dato un occhiata al codice che ho postato?
  • Re: Cosa significa variabile dinamica?

    Aldo, l'occhiata l'ho data DOPO averti risposto. Secondo me sei ancora fuori strada in più di un punto. Tieni presente però che non sono un esperto, solo un hobbista (guarda la "firma" in calce ad ogni mio messaggio).

    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)?

    M2, non voglio distoglierti dai tuoi impegni. Mi verrebbe da risponderti riprendendo le tue osservazioni, perché in più di un caso "ho i miei perché" per le scelte che faccio (ricordati il paragone con l'isola), ma la cosa rischierebbe di farsi tremendamente lunga. A me andrebbe anche bene, intendiamoci, però se non hai tempo ci saranno sicuramente altre occasioni.
  • Re: Cosa significa variabile dinamica?

    AldoBaldo ha scritto:


    M2, non voglio distoglierti dai tuoi impegni. Mi verrebbe da risponderti riprendendo le tue osservazioni, perché in più di un caso "ho i miei perché" per le scelte che faccio (ricordati il paragone con l'isola), ma la cosa rischierebbe di farsi tremendamente lunga. A me andrebbe anche bene, intendiamoci, però se non hai tempo ci saranno sicuramente altre occasioni.
    Fai, tanto sto bestemmiando in ogni lingua nota.
    Cominciamo dal principio.

    Davvero pensi di capire cosa significhi QMW in mezzo a un sorgente di un milione di righe?
    Poi vediamo le altre.
  • Re: Cosa significa variabile dinamica?

    QMV... in un contesto diverso avrei magari scelto strade diverse. Qui è cosa... di una pagina (anche se abbondante)!
    In questo caso, QUANTITA_MASSIMA_VALORI m'è sembrato ridondante.

    In situazioni concrete, mi capita di usare le versioni "tagliate" mentre scrivo, così da poter avere (come ho già detto) il più possibile sott'occhio il codice sul quale sto ragionando, per poi sostituirle con un "cerca e sostituisci" mirato con versioni più esplicite una volta che l'esigenza non c'è più (il più delle volte a mano, per evitare errori dovuti ad automatismi male applicati, e solo dopo aver provveduto a fare una copia di backup dell'intero progetto).

    P.S. Spero proprio che le bestemmie non siano dovute a quel che ci stiamo dicendo, perché proprio non c'è ragione! Ma forse ti riferivi al lavoro che stai svolgendo e che ti sta dando qualche... ehm... grattacapo...
  • Re: Cosa significa variabile dinamica?

    AldoBaldo ha scritto:


    QMV... in un contesto diverso avrei magari scelto strade diverse. Qui è cosa... di una pagina (anche se abbondante)!
    In questo caso, QUANTITA_MASSIMA_VALORI m'è sembrato ridondante.

    In situazioni concrete, mi capita di usare le versioni "tagliate" mentre scrivo, così da poter avere (come ho già detto) il più possibile sott'occhio il codice sul quale sto ragionando, per poi sostituirle con un "cerca e sostituisci" mirato con versioni più esplicite una volta che l'esigenza non c'è più (il più delle volte a mano, per evitare errori dovuti ad automatismi male applicati, e solo dopo aver provveduto a fare una copia di backup dell'intero progetto).
    E' un refactoring del tutto inutile. A me invece non sembra affatto eccessivo, anzi.
    P.S. Spero proprio che le bestemmie non siano dovute a quel che ci stiamo dicendo, perché proprio non c'è ragione! Ma forse ti riferivi al lavoro che stai svolgendo e che ti sta dando qualche... ehm... grattacapo...
    Riguarda un problema di Microsoft che, come al solito, emerge una volte ogni mille.
    Per quanto riguarda il thread scrivo mentre trasferisco le varie build di prova
  • Re: Cosa significa variabile dinamica?

    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
  • Re: Cosa significa variabile dinamica?

    L'uso della memoria dinamica... la "regola" di base dovrebbe essere che quello che hai allocato prima o poi lo devi deallocare, simmetricamente.

    Problema n. 1
    Dealloco più volte la memoria puntata dallo stesso puntatore. Disastri in vista.
    Una buona pratica per eliminare questo rischio, è impostare su NULL ogni puntatore appena si è deallocata la memoria puntata, per "marcarne" la non validità.

    Problema n. 2
    "Perdo" un puntatore (perché va fuori scopo, o perché lo sovrascrivo, o perché lo annullo). Non posso più deallocare la memoria puntata (memory leak).

    Problema n. 3
    Dimentico di deallocare qualcosa che ho allocato. Altro memory leak.

    Problema n. 4
    Dealloco da un puntatore NULL. A seconda di quanto sono stati accorti gli autori del compilatore può non succedere niente (di solito è così) o esplodere l'Universo.

    Problema n. 5
    Tralascio di verificare che l'allocazione sia riuscita, prima di usare un puntatore. Da lì in poi, il programma potrebbe "morire" in qualsiasi momento.

    Problema n. 6
    Creo oggetti di C++ che allocano internamente memoria, senza aver capito bene come si usa la memoria dinamica. Tra costruttori, distruttori, costruttori di copia, assegnamenti... gli errori sono assicurati e potenzialmente mortiferi.

    Questo per limitarsi alle cose che mi vengono in mente sui due piedi.
  • Re: Cosa significa variabile dinamica?

    Problema 7: sovrascrivere porzioni di memoria (esempio variabili, ma anche codice) nel caso in cui si "sbordi" il limite della memoria allocata (anche problema di sicurezza)
  • Re: Cosa significa variabile dinamica?

    Vero! Se non sbaglio vale anche per quelle allocate in modo non dinamico, no? Tipo, se all'inizio di un blocco dichiaro un int variabile[50]; e poi vado a scrivere su variabile[57] "debordo" in un'area della quale non ho disponibilità e che, a seconda delle situazioni, potrebbe essere in uso per qualsiasi altra cosa (magari vitale, magari no). Tra l'altro, quel tipo di errori a volte è pure difficile da identificare (quando le dimensioni del programma diventano consistenti), perché non dà sempre gli stessi "sintomi".
  • Re: Cosa significa variabile dinamica?

    AldoBaldo ha scritto:


    Vero! Se non sbaglio vale anche per quelle allocate in modo non dinamico, no? Tipo, se all'inizio di un blocco dichiaro un int variabile[50]; e poi vado a scrivere su variabile[57] "debordo" in un'area della quale non ho disponibilità e che, a seconda delle situazioni, potrebbe essere in uso per qualsiasi altra cosa (magari vitale, magari no). Tra l'altro, quel tipo di errori a volte è pure difficile da identificare (quando le dimensioni del programma diventano consistenti), perché non dà sempre gli stessi "sintomi".
    è giusto
  • Re: Cosa significa variabile dinamica?

    Insomma mi è chiaro che i puntatori sono proprio un bel casino
  • Re: Cosa significa variabile dinamica?

    aldorenati ha scritto:


    Insomma mi è chiaro che i puntatori sono proprio un bel casino
    No, non sono d'accordo.

    Sono sicuramente un argomento "delicato", ma come per tutto, quando lo "comprendi veramente", non puoi avere grossi problemi.
  • Re: Cosa significa variabile dinamica?

    aldorenati ha scritto:


    Insomma mi è chiaro che i puntatori sono proprio un bel casino
    Lo sono oggettivamente, tanto che in varie "evoluzioni" del C (a partire da C++ e Java) si cerca in ogni modo di "farli sparire" o almeno "nasconderli sotto il tappeto".
    Ci sono linguaggi buoni quanto il C/C++ (... esempio... pascal...basic...) dove non si usano praticamente mai, e si vive felicissimi.

    Certamente una delle fonti di maggiori grattacapi e "disastri" vari, anche per esperti e perfino espertissimi.
  • Re: Cosa significa variabile dinamica?

    Cosa ne pensate invece delle liste?
  • Re: Cosa significa variabile dinamica?

    aldorenati ha scritto:


    Cosa ne pensate invece delle liste?
    intendi elettorali?
Devi accedere o registrarti per scrivere nel forum
33 risposte