Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [ C ] sizeof a pointer

    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
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

  2. #2
    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 ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    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!
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

  4. #4
    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.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    questa è la funzione che definisce l'array a in questione...
    Codice PHP:
    intget_array(void){
    int i,j,*a;
    = (int *)malloc(sizeof(int));

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


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

    if(
    == 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!
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

  6. #6
    Prova in questo modo :
    codice:
    #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;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Grazie mille:-)
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

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