Buenas, estoy pasando un puntero(que apunta a cierta memoria reservada por malloc) como argumento de una función y adentro de la función quiero saber el largo del arreglo, lo quise hacer del siguiente modo pero me tira un error.
int main( void ) {
float *p,j;
int i=0,tamanio;
scanf("%d",&tamanio);
p=(float*)malloc(tamanio*sizeof(float));
j=funcion(p,i);
}
float funcion(float *n,int i){
if (i==(sizeof(n)/sizeof(float))){
...}
}
el error esta en el if de la función, dice:
error:cannot cast 'float' to 'float*'
si a alguien se le ocurre porque pasa esto, me seria de ayuda, gracias.
Por que en los parametros de la funcion no pasas el tamaño del arreglo?
j=funcion(p,tamanio);
El detalle que en C no hay forma de que otra funcion conozca cuanta memoria reservaste con malloc/calloc/realloc
Saludos
Cita de: fafafa01 en 25 Junio 2016, 22:32 PM
Buenas, estoy pasando un puntero(que apunta a cierta memoria reservada por malloc) como argumento de una función y adentro de la función quiero saber el largo del arreglo, lo quise hacer del siguiente modo pero me tira un error.
Si estas en
Windows puedes usar
_msize()#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
int *buffer = malloc(8 * sizeof(int));
printf("Size: %u\n", _msize(buffer));
free(buffer);
return 0;
}
En el caso de
Linux tienes
malloc_usable_size()
Valla no conocia
malloc_usable_sizeSi lo quieres usar tienes que colocar
#include<malloc.h>
Ahora segun el manual:
CitarNOTES top
The value returned by malloc_usable_size() may be greater than the
requested size of the allocation because of alignment and minimum
size constraints. Although the excess bytes can be overwritten by
the application without ill effects, this is not good programming
practice: the number of excess bytes in an allocation depends on the
underlying implementation.
The main use of this function is for debugging and introspection.
Segun dice que te puede devolver un valor mas grande que el que reservastes originalmente esto devido a cuestiones de alineamiento, y te dice que el principal uso es para depurar.
Mejor también envia el valor de la longitud que puede ser escribible en otra variable como otro argumento en la función.
Saludos!