malloc en C: mismo tamaño de antes y después?

Estoy experimentando un problema. Estoy tratando de obtener el número de elementos en una matriz int, sin pasar ningún parámetro explícito, solo el puntero a la matriz int. Ahora mi curiosidad:

int * set; printf("-- %d --", sizeof(set)); //4 set=(int *) malloc(n*sizeof(int)); printf("-- %d --", sizeof(set)); //4 

¿Por qué los valores son los mismos desde antes de que malloc no se inicialice y después de ser. Gracias
ACTUALIZAR:
¿Hay alguna manera de obtener la longitud de una matriz int?

Debido a que sizeof se evalúa en el momento de la comstackción y produce el tamaño del tipo de set , un puntero a int .

No hay una forma genérica de medir el tamaño de la memoria apuntada por un puntero en C, que no sea el caso especial de que las cadenas terminen en nulo por convención.

sizeof producirá el tamaño del puntero (4 bytes en un sistema de 32 bits, 8 bytes en un sistema de 64 bits), no de la memoria apuntada.

Si desea realizar un seguimiento del tamaño de la memoria asignada, las opciones son:

  • Síguelo en una variable separada
  • Introduzca un terminador de matriz especial (por ejemplo, el valor mínimo o máximo de int si su aplicación nunca usará ese valor de manera válida).
  • Use una biblioteca de administración de memoria alternativa (para dmalloc tiene dmalloc_examine , que devolverá el tamaño de memoria apuntado). Estos deberían aparecer con cambios mínimos o sin cambios en el código, excepto en el caso de que desee utilizar su API de memoria expandida.

El elemento que está midiendo, set , es un puntero a entero ( int* ). Y un puntero a entero es de 4 bytes.

sizeof NO mide la cantidad de memoria asignada al puntero. Solo mide el “elemento” en sí (en este caso, un puntero).

Un puntero es de 32 bits o 64 bits.

Es decir 4 u 8 bytes.

 int * set; printf("-- %d --", sizeof(set)); //4 set=(int *) malloc(n*sizeof(int)); printf("-- %d --", n*sizeof(int)); //n*sizeof(int) is the size of your malloc'd memory 

Espero que ayude. en su última statement aún preguntaba el tamaño del puntero de entero individual que tenía 4 bytes en su máquina. para obtener el tamaño de su área de memoria malloced necesita usar la misma expresión que está dentro de la función malloced.

y un puntero entero no es necesariamente del mismo tamaño que un int en sí mismo como Mat me corrigió en