Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [c++] allocazione memoria

    Il mio codice utilizza una funzione che crea dinamicamente un vettore bidimensionale ('na matrice). Il codice crea un file utilizzando questa funzione (diciamo che sta funzione estrae dei dati e li immette nel file). Perō il codice si pianta quando il file supera un tot di dimensione (circa 900 mega , ok ok č tanto ma non ci posso fare nulla ).
    Siccome mi č balenato nella memoria (la mia, non la ram) il ricordo che il c++ non gestisce la deallocazione (o na roba simile) la soluzione che ho applicato č stata di dichiarare la matrice static e quindi allocarla una sola volta. Il tutto parrebbe funzionare ma non sono sicuro che sia una cosa corretta. quindi chiedo conferma
    grazie
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    rivedi il tuo codice!!!
    Slack? Smack!

  3. #3
    :master: Potresti essere un po' pių esaustivo? :quipy:
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    posta il codice inerente all' allocazione cosi vediamo che fare.
    La stupiditā umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    ma tu allochi dinamicamente con una new?

    se č cosi e la new č in una funzione che viene chiamata spesso, al termine della funzione devi deallocare la memoria con

    delete [] variabile;
    "durante i primi 5 miuti di pioggia nel bosco c'č ancora asciutto, poi quando smetterā di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  6. #6
    allora dove ho segnato in neretto č dove c'č il problema, in realtā č un metodo di una classe, ma penso non cambi la sostanza
    codice:
    double **matrix(long pX, long pY)
    {
    double **mx;
    
    mx = new double *[nfo.dimensioneMatrix];
    if (!mx) a("mx"); // segnala eventuale errore
    
      for (int t=0; t<nfo.dimensioneMatrix; t++)
        {
         *(mx+t) = new double [nfo.dimensioneMatrix];
         if (!*(mx+t)) a("*(mx+t)"); // segnala eventuale errore
        }
       // poi ci sta la parte di codice che assegna i valori alla matrice
      // la ometto tanto non č rilevante ai fini del problema
    return mx;
    }
    e l'ho modificata cosė

    codice:
    double **matrix(long pX, long pY)
    {
    static double **mx;
    static int statica=0;
    
    if (!statica)
      {
       mx = new double *[nfo.dimensioneMatrix];
       if (!mx) a("mx"); // segnala eventuale errore
    
        for (int t=0; t<nfo.dimensioneMatrix; t++)
          {
           *(mx+t) = new double [nfo.dimensioneMatrix];
           if (!*(mx+t)) a("*(mx+t)"); // segnala eventuale errore
          }
         statica++;
       }
         // poi ci sta la parte di codice che assegna i valori alla matrice
       // la ometto tanto non č rilevante ai fini del problema
    return mx;
    }
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  7. #7
    Originariamente inviato da nik600
    ma tu allochi dinamicamente con una new?

    se č cosi e la new č in una funzione che viene chiamata spesso, al termine della funzione devi deallocare la memoria con

    delete [] variabile;
    IL fatto č che la funzione restituisce la matrice quindi come faccio a usare delete?
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  8. #8
    dovra pur essere ritornato in qualcosa....
    cancelli la variabile dove fai ritornare il valore della funzione..

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Originariamente inviato da AnĒkin
    :master: Potresti essere un po' pių esaustivo? :quipy:
    Si, scusami. In effetti ho fatto un'intervento del menga.
    Mi ha spaventato l'array da 900 MB.
    Non ti č possibile creare pių array (pių piccoli)
    ed aggiungere il contenuto sul file, deallocando
    man mano gli array, al fine di no occupare molta RAM?
    Magari ho detto una fesseria.
    Slack? Smack!

  10. #10
    @Sergio Pedone: Mi sono spiegato male. La funzione immette i dati un po' alla volta non tutti 900 mega assieme . Diciamo che cicla tra 100,000 e 1,000,000 volte(ipoteticamente anche di piu), ma la matrice di solito ha in media dimensione massima 7x7.

    @18leomagic18: il fatto č che la matrice ritornata dalla funzione non la posso cancellare se non alla fine del ciclo perchč chiaramente la utilizzo sempre.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.