PDA

Visualizza la versione completa : [C] Dimensione di un puntatore


Vre
07-04-2007, 15:44
Ho il solito array definito dinamicamente con malloc...dovrei sapere quanti slot sono stati allocati, quando grande l'array...

se array[n], vorrei sapere n (che viene definito dal'utente inserendo quanti valori vuole nell'array)

ho provato:

n = sizeof(a)/sizeof(*a);
n = sizeof(*a)/sizeof(int);

che avevo trovato a giro per il web, ma nulla...

p.s. un array di n interi!

p.p.s. Grazie :ciauz:

Samuele_70
07-04-2007, 16:11
In caso di allocazione dinamica del vettore, il sizeof() che lavora a
compile-time ti restituisce la dimensione del puntatore.

Ma perch non usi direttamente n ?

Vre
07-04-2007, 16:40
n = sizeof(*a);

mi rende sempre n=4...


n definito dinamicamente...
il vettore viene prima creato con malloc e poi gli rialloco lo spazio che gli serve via via!

Samuele_70
07-04-2007, 18:08
Originariamente inviato da Vre
n = sizeof(*a);

mi rende sempre n=4...

Appunto, quella la dimensione, in byte, del puntatore a intero *a.


n definito dinamicamente...
il vettore viene prima creato con malloc e poi gli rialloco lo spazio che gli serve via via!

Devi tenere un indice con il numero dei caratteri immessi dall'utente.
Per essere pi precisi bisognerebbe vedere il codice che sati utilizzando.

Vre
07-04-2007, 18:37
questa la funzione che definisce l'array a in questione...


int* get_array(void){
int i,j,*a;
a = (int *)malloc(sizeof(int));

if(a == NULL)
{
printf("\nMemoria insufficiente\n");
exit(1);
}


i=-1;
do{
i++;
printf("\n [%d]--> ",i);
a = (int *)realloc(a,(i+1)*sizeof(int));

if(a == NULL)
{
printf("\nMemoria insufficiente\n");
exit(1);
}

}while(scanf("%d",&a[i]));

return(a);
}


Un utente pu inserire n numeri..io vorrei sapere quanto vale n...

Grazie!

Samuele_70
07-04-2007, 20:21
Prova in questo modo :


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int *get_array(int *len)
{
int *vettore;
vettore = (int *)malloc(sizeof(int));
if(vettore == NULL)
{
printf("\nMemoria insufficiente\n");
exit(1);
}
(*len)=0;
while(scanf("%d", &vettore[(*len)])==1)
{
vettore=(int *) realloc( vettore, (++(*len)+1)*sizeof(int));
if(vettore == NULL)
{
printf("\nMemoria insufficiente\n");
exit(1);
}
}
return vettore;
}

int main()
{
int i, len, *vettore;
printf("Inserisci il contenuto del vettore :\n");
printf("Inserire un carattere alfabetico per terminare)\n");
vettore=get_array(&len);
printf("Contenuto del vettore :\n");
for( i=0; i<len; i++)
printf("%d,", vettore[i]);
return EXIT_SUCCESS;
}

Vre
08-04-2007, 11:00
Grazie mille:-)

Loading