Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]allocazione memoria

    ho la seguente funzione:
    codice:
    void CImporter::ImportFaces()
    {
    	m_pApi->FaceReset();
    	int *idx = NULL;
    	int nCount = 0;
    	for(int index = 0;m_pApi->NextFace();index++)
    	{	
    		if(m_pApi->ImportFaces(idx,nCount))
    		{
    			int isiz=sizeof(idx);
    		
    			m_polygon->addFace(idx,NULL);
    			
    		}
    	}
    }
    la variabile *idx viene inizializzata a null e settata a 3 nella funzione ImportFaces cosi':
    codice:
    idx = new int[2];

    perchè quando faccio il sizeof di idx int isiz=sizeof(idx)-1 è = a 3?
    ovvero isiz=sizeof(idx)=4????


    il problema è che passo la definizione della funzione in cui passo e imposto la variabile è questa:
    codice:
    bool ImportFaces(int *& idx,int nCount);

    Cosa sbaglio?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché idx è un puntatore e la dimensione di ogni puntatore è 4 bytes su sistemi 32bit.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    e come faccio a sapere quanti elementi ha un array?
    ad es:
    int i[3] =3
    int i[8]=8 ecc...?

    e cambia ho visto se alloco dello spazio con i puntatori, ad es come si fa con...
    int idx= new int[3] = 3
    int idx= new int[6] =6
    int idx= new int[23] = 23

  4. #4

  5. #5
    Per sapere la dimensione di un ARRAY, ci sono 3 modi:
    1) La dimensione è conosciuta a compile-time, cioè è stata dichiarata all'inizio del blocco.
    Esempio:
    codice:
    int array[20];
    
    printf("%d\n", sizeof(array)); //Stampa 20 * dimensione intero; cioè 20*4=80 su sistemi a 32 bit
    2) Alla fine dell'array è presente un'elemento, un flag, che ne indica la fine. Basta cliclare fino a quando non si incontra codesto elemento, e si contano le iterazioni. Un'esempio è il terminatore di stringa.
    3)Si hanno: un puntatore all'inizio dell'array, ed uno alla fine. Basta dunque fare la sottrazione dei due.


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.