Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95

    [C++]dubbio sulla deallocazione delle variabili

    Salve! in questo caso:

    codice:
    struct Square{
    	Vector2 position;
    	float size;
    	Vector3 point[4];
    	bool isFree;
    	Square* linked[8];
    };
    Sono in una funzione qualsiasi, "squareA" è un "Square" che è ad esempio una variabile pubblica di una classe e in un if faccio questo:

    codice:
    if(...){
    	Square s;
    
    	squareA.linked[1] = &s;
    }
    squareA.linked[1] punterà a "s", ma al terminde dell'if, da quel che mi ricordo, le variabili vengono deallocate...perciò in questo caso che succede a "s"? al termine dell'if squareA.linked[1] a cosa punterà?
    Grazie!
    squareA.linked[1] otterrà il riferimento

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Avrai un puntatore che punta ad una zona deallocata. Uno "zombie" ...

    Quando lo userai potrai avere due comportamenti

    1) l'area e' stata allocata nel frattempo dal programma e quindi il tuo puntatore accedera' a dati che potrebbero essere leggibili ma non coerenti con quello che ti aspetti (caso peggiore);

    2) l'area non e' stata allocata e quindi avrai un errore di accesso alla memoria ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    Come si può ovviare a questo problema?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Usa un puntatore e alloca dinamicamente la struttura ... ad esempio per il C

    codice:
    if(...){
    	Square *s;
    
                 s = (struct Square *)malloc(sizeof(struct Square));
    
    	squareA.linked[1] = s;
    }
    o addirittura

    codice:
    if(...){
    	squareA.linked[1] = (struct Square *)malloc(sizeof(struct Square));
    }
    Ho omesso il controllo per evitare problemi sull'allocazione della memoria ma lo puoi fare tu ...

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