Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fafafa01 en 25 Junio 2016, 22:32 pm



Título: Problema con puntero a una memoria reservada
Publicado por: 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.

Código
  1. int main( void ) {
  2. float *p,j;
  3. int i=0,tamanio;
  4. scanf("%d",&tamanio);
  5. p=(float*)malloc(tamanio*sizeof(float));
  6. j=funcion(p,i);
  7. }
  8.  
  9. float funcion(float *n,int i){
  10. if (i==(sizeof(n)/sizeof(float))){
  11. ...}
  12. }

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.


Título: Re: Problema con puntero a una memoria reservada
Publicado por: AlbertoBSD en 25 Junio 2016, 23:01 pm
Por que en los parametros de la funcion no pasas el tamaño del arreglo?

Código
  1. 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


Título: Re: Problema con puntero a una memoria reservada
Publicado por: geeke en 26 Junio 2016, 08:15 am
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()

Código
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4.  
  5. int main( void )
  6. {
  7.   int *buffer = malloc(8 * sizeof(int));
  8.   printf("Size: %u\n",  _msize(buffer));
  9.   free(buffer);
  10.   return 0;
  11. }
  12.  

En el caso de Linux tienes malloc_usable_size()


Título: Re: Problema con puntero a una memoria reservada
Publicado por: AlbertoBSD en 26 Junio 2016, 14:04 pm
Valla no conocia malloc_usable_size

Si lo quieres usar tienes que colocar

Código
  1. #include<malloc.h>

Ahora segun el manual:

Citar
NOTES         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!