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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
201  Programación / Programación C/C++ / Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C] en: 5 Mayo 2016, 00:35 am
Hola, gracias a ambos por las respuestas, muy esclarecedoras por cierto. -
Una cosita más, la memoria asignada a la pila y el montón es monitoreada por el SO, hay alguna manera con C saber cuanta memoria se le asigna a estas 2 areas de memoria de un determinado programa(cuantos bytes). -

Citar
Los arrays y las tablas són siempre más eficientes, pues son datos que se guardan en la pila y el código que se genera para acceder a ellos es más rápido que acceder el montón. Por otra parte la memoria de la pila es bastante más limitada, en tamaño que la del montón y para un gran número de elementos te podrías quedar sin pila de programa rápidamente.

No hay contradicciones en esta descripción, digo.



Saludos.
202  Programación / Programación C/C++ / ¿Que es más eficiente, utilizar array o memoria dinámica? [C] en: 4 Mayo 2016, 20:03 pm
Hola a todos.
Copie el código de la siguiente página que me indico Eternal Idol, referente a realloc:
http://www.cplusplus.com/reference/cstdlib/realloc/

Y grande fue mi sorpresa cuando descubrí que utilizando memoria dinámica se podía hacer lo mismo que con un array, digo sorpresa porque considero haber leído bastante sobre punteros y en ninguno hace referencia a esto. -
Si esto es correcto, tengo 1 pregunta para hacerles. -
¿Que es más eficiente, utilizar array o memoria dinámica?, para el caso. -  

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. int main ( void ){
  6. size_t ingresos, n, contador = 0, ok, ch;
  7. int* numeros = NULL;
  8. int* mas_numeros = NULL;
  9.  
  10. do{
  11. do{
  12. printf("\n Ingresa un numero entero(maximo %d  => 0 finaliza )....: ", INT_MAX);
  13. ok = scanf("%u", &ingresos) == 1 && ingresos >= 0 && ingresos <= INT_MAX;
  14. while( (ch = getchar()) != EOF && ch != '\n' );
  15. if( ok == 0 ){
  16. printf( "\n El ingreso es incorrecto, intentelo nuevamente...\n\n\t Pulse una tecla para continuar..." ); getchar();
  17. }
  18. }while(!ok);
  19.  
  20. contador++;
  21.  
  22. mas_numeros = (int*)realloc( numeros, contador * sizeof(int) );
  23.  
  24. if( mas_numeros!=NULL ){
  25. numeros=mas_numeros;
  26. numeros[contador-1]=ingresos;
  27. }
  28. else{
  29. free( numeros );
  30. puts( "Error (re)allocating memory" );
  31. exit(1);
  32. }
  33. }while (ingresos!=0);
  34.  
  35. printf ("\n Numeros introducidos.....: ");
  36. for( n=0; n < contador - 1; n++ )
  37. printf( "%d ",numeros[n] );
  38.  
  39. free (numeros);
  40.  
  41. return 0;
  42. }

Es redundante decir que al código original le efectué bastante modificaciones, pero la esencia es la misma.

Saludos.
203  Programación / Programación C/C++ / Re: Liberar memoria de 2 punteros apuntando a la misma dirección(malloc/realloc/free en: 4 Mayo 2016, 14:12 pm
Hola y que tengan un muy buen día.
Voy a intentar un resumen, lo que este equivocado, por favor, corríjanlo. -
Con liberar la memoria de string2, es suficiente dado que de string1 se encarga realloc, si no es el fin del programa deberíamos igualar los punteros string1 y string 2 a NULL. -
En el futuro voy a hacer preguntas más interesante, me agrada cuando participa el "jefe". -

Muchas gracias a todos y un abrazo.
204  Programación / Programación C/C++ / Re: Liberar memoria de 2 punteros apuntando a la misma dirección(malloc/realloc/free en: 4 Mayo 2016, 00:28 am
En definitiva, lo que pregunte parecería que tendría una respuesta obvia, solo que quería estar más seguro teniendo la palabras de Uds. los expertos.-
AlbertoBSD, gracias nuevamente.

Un abrazo.
205  Programación / Programación C/C++ / Re: Liberar memoria de 2 punteros apuntando a la misma dirección(malloc/realloc/free en: 3 Mayo 2016, 23:29 pm
Muchas gracias a los 3 por ocuparse, si entendí bien con hacer free(string2) es suficiente. -
Al releer el tema en un momento dice que si string2 es menor a string1 el administrador del montón tratara de utilizar la misma dirección de memoria y como pude comprobar con este programa la dirección de  string1 es la misma que string2, ¿esto es correcto? o interprete mal. -
Geeke, lo tuyo es lo único que no me queda claro. -

Saludos.
206  Programación / Programación C/C++ / [Solucionado] Liberar memoria de 2 punteros apuntando a la misma dirección(C) en: 3 Mayo 2016, 21:43 pm
Hola, gente. -
¿Es necesario liberar los 2 punteros por separado?, como lo hago en el código que dejo a continuación o es suficiente con liberar el puntero que devuelve malloc (tengo claro que malloc retorna un puntero void). -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main( void ){
  6. char *string1, *string2;
  7. string1 = (char*) malloc(16);
  8. strcpy(string1, "0123456789AB");
  9.  
  10. string2 = realloc(string1, 8);
  11. printf("string1 Valor: %p [%s]\n", string1, string1);
  12. printf("string2 Valor: %p [%s]\n", string2, string2);
  13.  
  14.  
  15. free(string1);
  16. free(string2);
  17.  
  18. return 0;
  19. }

Bueno es todo, espero aclaración.
Un abrazo.
207  Programación / Programación C/C++ / Re: TIP: para limpiar el buffer de entrada en: 29 Abril 2016, 18:56 pm
Hola.
Si sirve de algo dejo la manera que yo utilizo para lograr más o menos lo mismo. -

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main( void ){
  5. char a[5], *p = NULL;
  6. size_t ch;
  7.  
  8. printf( "\n Ingrese una frase...:" );
  9. fgets( a, 5, stdin );
  10. if((p=strchr(a, '\n'))){
  11. *p='\0';
  12. }
  13. else{
  14. while((ch = getchar()) !='\n' && ch!=EOF);
  15. }
  16.  
  17. printf("\n %s", a);
  18.  
  19. return 0;
  20. }




Saludos.
208  Programación / Programación C/C++ / Re: Liberar memoria asignada con malloc, después de salir de la función [C]. en: 28 Abril 2016, 04:03 am
Hola, Geeke.
Muchas gracias por el aporte, te voy a hacer una confesión, no tengo la más pálida idea del inglés y lo estoy traduciendo utilizando 4 traductores en línea (la tradución que me parece más acertada la paso a un borrador para estudiarlo luego) y como te imaginaras por momento entre la traducción que no es exacta y las ganas de disipar mis dudas ocurren estas cosas. -
Lo de no saber nada del idioma es por mis 64 años, en mis tiempos de estudio casi no se le daba importancia al inglés, pero como todos en los foros (cuando se da la oportunidad) me dicen que los mejores contenidos están en ese idioma, bueno estoy asiendo el esfuerzo.

Te envio un abrazo.
209  Programación / Programación C/C++ / Re: Liberar memoria asignada con malloc, después de salir de la función [C]. en: 27 Abril 2016, 22:46 pm
MAFUS, no seas tan duro con mi manual, es interesantisimo.-



Saludos.
210  Programación / Programación C/C++ / Re: Liberar memoria asignada con malloc, después de salir de la función [C]. en: 27 Abril 2016, 22:08 pm
Hola, MAFUS. -
Por favor y antes de que tenga que hacer meditación para tranquilizarme, ¿que tiene que ver mi programas con los archivos?

Código
  1. FILE *f = fopen(ruta, modo);

Citar
En verdad no sé que manual estás siguiendo pero tíralo.
jajajajajajajajaja.....

No obstante, ya descubrí por donde viene la mano:

Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines