elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con puntero a una memoria reservada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con puntero a una memoria reservada  (Leído 1,929 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Problema con puntero a una memoria reservada
« 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.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Problema con puntero a una memoria reservada
« Respuesta #1 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


« Última modificación: 25 Junio 2016, 23:03 pm por AlbertoBSD » En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Problema con puntero a una memoria reservada
« Respuesta #2 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()
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Problema con puntero a una memoria reservada
« Respuesta #3 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!

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines