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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Malloc ...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Malloc ...  (Leído 7,399 veces)
roser24

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Malloc ...
« en: 5 Mayo 2010, 18:41 pm »

Hola chicos :-[..
Usando malloc como seria para usar el valor de la longitud de mi vector?
me explico con new era algo asi:float *vec=new float[l]; // donde l era la longitud que el usuario indico en el programa... bien con malloc viendo su estructura en google seria lo siguiente:
float *vec = malloc(sizeof(float));//como hago para indicar la longitud del vector?

Y en cadenas me podeis decir porfavor algun ejemplo de cadenas y como reservar memoria con malloc?..que reciba la cadena en el main y luego trabaje con el contenido de ella en una funcion por referencia usando punteros..

Muxisisimas gracias de antemano


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Malloc ...
« Respuesta #1 en: 5 Mayo 2010, 18:50 pm »

Código:
float *vector = malloc(sizeof(float) * n);

Siendo n la cantidad de elementos del vector.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
roser24

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: Malloc ...
« Respuesta #2 en: 5 Mayo 2010, 19:04 pm »

Hola Leo gracias por el code,veras lo probe en mi programa :
Código
  1. /*5.    Crear una función que copie el contenido de un primer vector de flotantes
  2. en otro segundo con el mismo número de elementos. La función debe ser válida para
  3. cualquier par de vectores con el mismo número de elementos. Genera el
  4. programa principal para poder ejecutar la función creada.*/
  5.  
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. void copiar_valor(float *,int,float *);
  9. void print_vector(float *,int,float *);
  10. void main(){
  11.  
  12. int l=0,i=0;
  13.  
  14. do{
  15. printf("Introduce la longitud del primer vector:\n");
  16. scanf("%d",&l);
  17. }while(l<0);
  18. printf("La longitud del segundo vector sera la misma\n");
  19. float *vec=malloc(sizeof(float)*l);
  20. float *vec2=malloc(sizeof(float)*l);
  21.  
  22. for(i=0;i<l;i++){
  23. printf("inserta valores para el primer vector %d:",i);
  24. scanf("%f",vec+i);
  25. }
  26.  
  27.  
  28. copiar_valor(vec,l,vec2);
  29. print_vector(vec,l,vec2);
  30. free(vec);
  31. free(vec2);
  32.  
  33. }
  34. void copiar_valor(float *vector,int size,float *vector2){
  35. int i;
  36. for(i=0;i<size;i++){
  37.  
  38. *(vector2+i) = *(vector+i);
  39. }
  40.  
  41.  
  42. }
  43. void print_vector(float *vector,int size,float *vector2){
  44. int j;
  45. for(j=0;j<size;j++){
  46. printf("%0.2f\n",*(vector+j));
  47. }
  48. for(j=0;j<size;j++){
  49. printf("\n%0.2f",*(vector2+j));
  50.  
  51.  
  52. }
  53. }
  54.  
Al compilar me salen 2 errores  y son ambos en las lineas del malloc..
Código
  1. el error es "cannot convert 'void *' to 'float *' in fuction main()
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Malloc ...
« Respuesta #3 en: 5 Mayo 2010, 19:08 pm »

Debe de ser "int main()", no "void main", cualquier compilador decente te avisaría del fallo.

Corregí esto y tu código me va bien, mira:

Código:
leo@lein:~/Escritorio$ ./code
Introduce la longitud del primer vector:
3
La longitud del segundo vector sera la misma
inserta valores para el primer vector 0:12
inserta valores para el primer vector 1:23
inserta valores para el primer vector 2:34
12.00
23.00
34.00

12.00
23.00
34.00leo@lein:~/Escritorio$
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
cgvwzq

Desconectado Desconectado

Mensajes: 57


Agente P.


Ver Perfil WWW
Re: Malloc ...
« Respuesta #4 en: 5 Mayo 2010, 19:10 pm »

También puedes usar calloc (inicializa todo a cero):

Código
  1. void * calloc (size_t nelem, size_t elsize);

nelem - numero de elementos
elsize - tamaño de cada elemeno

Y para evitar warnings, convierte el valor devuelto por las funciones a un puntero de tu tipo, en este caso float:

Código
  1. vector = (float *)(malloc(sizeof(float) * n));
En línea

Some stuff:

  • www.a] parsed as ]www.a]
  • Bypass elhacker's img filter with ALT attribute!
  • ¿Para cuándo SQLi I y II? WZ


roser24

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: Malloc ...
« Respuesta #5 en: 5 Mayo 2010, 19:27 pm »

Hola chicos,gracias por responder  ;-),

leo no se porque pero poniendo el main como int main(){
y al final del main el return 0; me seguia dando los 2 errores que comente anteriormente.
Pero modificando mis malloc's como indico cgvwzq desaparecieron los errores  :o
las lineas quedaron asi:
float *vec=(float *)(malloc(sizeof(float)*l));
float *vec2=(float *)(malloc(sizeof(float)*l));
comparando con new ,new es mucho mas simple  :D

chicos y si en lugar de un float mi vector es de letras es decir un char?
seria asi?
char *cad=(char *)(malloc(sizeof(char)*longi));
en resumen siempre se sigue la misma estructura en malloc? no tiene nada que ver que mi longi sea de tipo int no?
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Malloc ...
« Respuesta #6 en: 5 Mayo 2010, 19:41 pm »

He leído que en C no es necesario convertir un "void *" al tipo correcto.

Por lo que me extraña de tu compilador.

¿Qué compilador usas?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Malloc ...
« Respuesta #7 en: 5 Mayo 2010, 19:45 pm »


chicos y si en lugar de un float mi vector es de letras es decir un char?
seria asi?
char *cad=(char *)(malloc(sizeof(char)*longi));
en resumen siempre se sigue la misma estructura en malloc? no tiene nada que ver que mi longi sea de tipo int no?

Sí, siempre es así x = <cast al puntero del tipo>malloc(sizeof(tipo) * <numero elementos>)
Es porque malloc es genérico: devuelve void * y reserva bytes por eso necesitamos saber cuantos bytes ocupa nuestro tipo y multiplicarlo
El free se hace sin nada especial

He leído que en C no es necesario convertir un "void *" al tipo correcto.

Por lo que me extraña de tu compilador.

¿Qué compilador usas?
En C++ creo que sí es obligatorio, pues tiene chequeo más fuerte de tipos(en tiempo de compilación)
En línea

roser24

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: Malloc ...
« Respuesta #8 en: 5 Mayo 2010, 19:46 pm »

veras en el curro nos quitaron a todos permiso de administrador por ello no me pude instalar ningun compilador,.
lo unico uso uno portable el turbo C++,como no hace falta instalacion me lo llevo en un pen y listo..
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Malloc ...
« Respuesta #9 en: 5 Mayo 2010, 19:48 pm »

Ah, con razón.

Consíguete otro compilador o vas a seguir teniendo problemas como este.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Malloc y array ??
Programación C/C++
<<<-Basura->>> 2 3,420 Último mensaje 4 Octubre 2011, 15:19 pm
por LearningSpanishProgrammer
Dudas con malloc...
Programación C/C++
Metal-byte 2 2,200 Último mensaje 1 Enero 2012, 16:15 pm
por Metal-byte
Problemilla con punteros y malloc
Programación C/C++
totolia 2 3,952 Último mensaje 25 Marzo 2012, 01:02 am
por totolia
¿Duda sobre malloc en C?
Programación C/C++
D4P50N 2 2,311 Último mensaje 20 Noviembre 2012, 00:15 am
por D4P50N
Duda, problema de asignacion con Malloc
Programación C/C++
Fabi0lo 6 3,180 Último mensaje 25 Noviembre 2012, 18:31 pm
por 0xDani
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines