Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    20

    Riallocazione dinamica con new

    Mi sapreste dire per favore se il seguente frammento di codice è corretto?

    Vtmp=V;

    if ( ( rA=new int[n] )==NULL){ printf("ERRORE!\n"); exit(0); }

    for (i=0; i<n; i++)
    V[i]=Vtmp[i];

    delete[] Vtmp;

    Si tratterebbe di una reallocazione di memoria.
    Mi da errore, accesso violato

    Aiutatemi

    Ciao, Danilo

  2. #2
    Chiarisci i tipi e usa dei nomi migliori per le variabili. Cosi` non si capisce molto .. :quipy:

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    potresti usare malloc/realloc/free

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    20
    int *Vtmp

    Vtmp=V;

    if ( ( V=new int[n] )==NULL){ printf("ERRORE!\n"); exit(0); }

    for (i=0; i<n; i++)
    V[i]=Vtmp[i];

    delete[] Vtmp;


    C'erano un errore, scusate

  5. #5
    Ciao,

    non si capisce bene cosa tu voglia fare, immagino Vtmp stia puntando a della memoria allocata ed inizializzata e che tu voglia copiare il contenuto in un altra porzione di memoria puntata da V.

    Se è quello che vuoi fare allora non scrivere Vtmp=V senno perdi la porzione di memoria inizializzata e sia Vtmp che V puntano a nullo.

    Quindi togli quella linea e la roba dovrebbe andare ma ancora piu' semplice sarebbe:

    //int* Vtmp e' inizializzato e punta a della memoria allocata

    int* V = new int [n];
    if(V == NULL)
    exit(0); //dai errore qui

    memcpy(V, Vtmp, sizeof(int)*n);
    delete[] Vtmp;


    Se invece sia Vtmp che V non sono inizializzati allora non ha senso quello che vuoi fare .

    Ciao
    ---------------------------------
    Luigi Fumero
    luigi@luigifumero.com
    www.luigifumero.com
    ---------------------------------

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    20
    Lasciamo perdere, ora mi rendo conto che per la fretta ho sbagliato completamente il codice.

    Comunque quel che volevo fare era semplice: volevo fare l'equivalente della realloc() con new e delete.

    In pratica V è un vettore allocato, Vtmp è un vettore di appoggio, n è la dimensione di V (es. n=100).

    Supponendo che avendo riempito V abbia bisogno di raddoppiarne la dimensione per inserire altri dati.
    n=200.

    con quel frammento di codice avrei dovuto allocare in Vtmp un vettore di dimensione 200, copiarvi dentro i 100 elementi di V e assengrare Vtmp a V, dopo aver liberato lo spazio occupato da V.

    Grazie comunque a tutti. Ciao, Danilo

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 © 2026 vBulletin Solutions, Inc. All rights reserved.