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:
int
si su aplicación nunca usará ese valor de manera válida). 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