Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93

    distruttore violazione memoria

    Salve a tutti .. sto esercitandomi su template .. classi etc ..

    provando a fare un semplice caso di template di classe con tipo paramentrico e tipo non paramentrico riscontro un errore che da debug risulta essere nell'distruttore

    il codice e` il seguente

    codice:
     
    
    #include<iostream>
    #include<iomanip>
    #include<cstdlib>
    
    
    using namespace std;
    
    
    
    template< typename T , int N >
    
    class Array{
    
    public:
    		Array( float = 0.0 );
    		~Array();
    		void initialize( float );
    //		void setArray(N);
    
    private:
    		T* arrayPtr ;
    		int size ;
    
    };
    
    template<typename T, int N>
    Array<T,N>::Array( float value)
    	: size( N > 0 ? N : 1 ),
          arrayPtr( new T[size] )
    {
    		initialize( value );	
    }
    
    template<typename T, int N>
    Array<T,N>::~Array()
    {
    	delete[] arrayPtr;
    
    }
    
    
    template<typename T, int N>
    void Array<T,N>::initialize( float v )
    {
    
    	for(int i=0 ; i < size ; i++) arrayPtr[i] = v ;
    
    }
    
    
    
    int main(){
    
    		Array<float , 100 > A(0.2) ;
    		system("echo 'pause'");
    
    
    return 0 ;
    }
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: distruttore violazione memoria

    Originariamente inviato da drudox
    nell'distruttore
    nel distruttore ...

    Però, il codice e` illeggibile ...

    EDIT: adesso hai corretto ... leggo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93
    si mi sono accorto dopo aver postato e` ho gia` modificato .. scusa
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

  4. #4
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93
    preciso che se inizializzo


    codice:
       : arrayPtr( new T[size] )

    all interno del corpo del costruttore (ovviamente con :

    codice:
        arrayPtr = new T[size]
    )
    il problema non sussiste
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema è nel costruttore ... nella lista di inizializzazione

    : size( N > 0 ? N : 1 ),
    arrayPtr( new T[size] )

    il valore della size usato per la new non è quello assegnato con la prima parte ma il valore casuale precedente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93
    come mai scusa ?

    ho anche provato a verificare e la dimensione di size nel costruttore risulta esser esatta ... perche` viene usato un altro valore ?
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

  7. #7
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93
    si cmq se ripeto l'espressione all'interno delle quadre .. il problema non sussiste .. ma non me lo spiego
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La constructor list viene valutata non come appare nel costruttore, ma in base all'ordine delle variabili nella classe.
    In altre parole:
    codice:
    private:
    		T* arrayPtr ;
    		int size ;
    prima viene inizializzato arrayPtr, dopo viene inizializzata size.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di drudox
    Registrato dal
    Sep 2011
    Messaggi
    93
    ess evvero .. dimenticavo .. Grazie infinite !!!
    C
    C Saluti .. Il DrudoX
    C
    STOP
    END

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.