PDA

Visualizza la versione completa : [c++]allocazione memoria


giuseppe500
10-08-2008, 14:27
ho la seguente funzione:


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':

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:

bool ImportFaces(int *& idx,int nCount);


Cosa sbaglio?

Grazie.

shodan
10-08-2008, 15:17
Perché idx è un puntatore e la dimensione di ogni puntatore è 4 bytes su sistemi 32bit.

giuseppe500
10-08-2008, 20:58
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

MacApp
11-08-2008, 02:49
Array e puntatori sono due cose DIVERSE. Te l'ho già spiegato in un altro thread.
http://forum.html.it/forum/showthread.php?threadid=1261010

menphisx
11-08-2008, 18:29
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:


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.

:ciauz:

Loading