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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 102
291  Programación / Programación C/C++ / Re: MEMORIA SIN LIBERAR C++ en: 6 Julio 2020, 21:04 pm
Gracias por responder!
Claro, conozco Valgrind pero mi idea era (para un trabajo de la escuela) poder mostrarle con un throw que confirme que se liberó toda la memoria.
Desconozco si existe alguna manera de mostrar eso tal y como quieres pero la verdad me extraña que exista. Al final al que le importa que se libere la memoria no es al usuario sino al desarrollador y éste último tiene a su alcance herramientas externas para comprobar que la memoria está liberada ante cualquier finalización del programa.

¿Cómo puedes saber que no se liberó memoria y cuando se se liberó?
Cuando se habla de liberar memoria se hace referencia a la que se reserva de manera dinámica usando funciones como: malloc()/realloc()/calloc() (en C) o new() (en C++). Esta memoria tiene que ser liberada de forma manual con: free() (en C) o delete() (en C++).
Por ejemplo puedes usar herramientas como valgrind (en Linux) y ejecutar:
Código:
$ gcc free_memory.c -o free_memory
$ valgrind ./free_memory
Y se ejecutará tu programa de manera normal para después indicarte si ha quedado memoria no liberada:
Código:
==11393== Command: ./free_memory 
==11393== HEAP SUMMARY:
==11393==     in use at exit: 10 bytes in 1 blocks
==11393==   total heap usage: 3 allocs, 2 frees, 2,058 bytes allocated
==11393==
==11393== LEAK SUMMARY:
==11393==    definitely lost: 10 bytes in 1 blocks
==11393==    indirectly lost: 0 bytes in 0 blocks
==11393==      possibly lost: 0 bytes in 0 blocks
==11393==    still reachable: 0 bytes in 0 blocks
==11393==         suppressed: 0 bytes in 0 blocks
==11393== Rerun with --leak-check=full to see details of leaked memory
==11393==
==11393== For counts of detected and suppressed errors, rerun with: -v
==11393== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Como te indica ahí, puedes usar otros parámetros para la ejecución de valgrind para obtener más información.

La salida del mismo programa liberando la memoria dinámica con free():
Código:
==11457== HEAP SUMMARY:
==11457==     in use at exit: 0 bytes in 0 blocks
==11457==   total heap usage: 3 allocs, 3 frees, 2,058 bytes allocated
==11457==
==11457== All heap blocks were freed -- no leaks are possible
==11457==
==11457== For counts of detected and suppressed errors, rerun with: -v
==11457== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
292  Programación / Programación C/C++ / Re: MEMORIA SIN LIBERAR C++ en: 6 Julio 2020, 05:44 am
Existen opciones como valgrind (para Linux) que te permiten ejecutar un programa y al finalizar te muestra información entre la que se encuentra la cantidad de memoria sin liberar o los errores que se hayan producido durante la ejecución.
Con esto puedes probar tu programa y ver que no queda memoria sin liberar antes de su finalización.

Pero obviamente estas herramientas no están destinadas a ser usadas por el usuario final sino por el desarrollador. Debes ser tú quien pruebe tus programas con alguna herramienta del estilo para ver que no queda memoria sin liberar.
293  Programación / Programación C/C++ / Re: Ayuda Run-time Failure stack around the variable ping was corrupted en: 4 Julio 2020, 20:33 pm
La solución que busques dependerá un poco de las necesidades de tu programa.

Si por ejemplo, es un programa que estás haciendo para aprender a manejar cadenas o para hacer llamadas al sistema, lo más seguro es que no compense centrar tus esfuerzos en la longitud exacta de las cadenas. Es por esto que normalmente se emplean cadenas char estáticas con tamaños superiores a los necesarios (siempre que la cantidad de memoria no sea un problema).

Si quieres hacerlo con más precisión podrías utilizar memoria dinámica para que cada cadena tenga el largo justo y necesario o utilizar la función strlen() para obtener el largo de una cadena y realizar las cuentas necesarias para calcular de antemano la longitud que necesitas.
294  Programación / Programación C/C++ / Re: Ayuda Run-time Failure stack around the variable ping was corrupted en: 2 Julio 2020, 04:01 am
El problema más gordo está en la línea 38. No puedes pasar la cadena concatenada sin antes guardarla en una variable. Es por esto que se corrompe la pila y te sale ese error.

Además de eso, cuidado con la longitud para la IP. Utilizas una longitud de 15 porque la ip más larga es de 15 caracteres pero no estás teniendo en cuenta el caracter de fin de cadena ('\0'). Cuando utilizas fgets() e indicas SIZE_IP, la función guarda hasta un máximo de (SIZE_IP - 1) caracteres; puesto que el último lo reserva para el de fin de cadena.

Y para las cadenas evita usar scanf(), fscanf() y similares. Es preferible usar siempre fgets(). Además fflush(stdin) no es la manera correcta de limpiar el buffer de entrada. Esa función solo está definida para limpiar el de salida (fflush(stdout)).

Te dejo una variante que funciona (está probada en Linux):
Código
  1. printf("Introduce el nombre del fichero con las direcciones IP: ");
  2. fgets(file_name, SIZE_NAME, stdin);
  3.        // Eliminar el salto de linea del final y limpiar el buffer de entrada
  4. if(file_name[strlen(file_name)-1] == '\n') file_name[strlen(file_name)-1] = '\0';
  5. else while(getchar() != '\n');
  6.  
  7. file = fopen(file_name, "r");
  8.  
  9. while(fgets(ip, SIZE_IP, file)){
  10. printf("IP address to ping: %s", ip);
  11. strcpy(command, "ping -c 4 ");
  12. strcat(command, ip);
  13. system(command);
  14. }


295  Programación / Programación C/C++ / Re: Pin y contraseña en: 26 Junio 2020, 02:48 am
Como ya te han dicho, estás accediendo a posiciones de memoria desconocidas. Además el número aleatorio que generas no está entre 0 y 35 sino entre 0 y 49. Tendrías que hacer que el número aleatorio esté entre 0 y 9 mediante: (rand() % 10).

Otro problema a tener en cuenta es que no generas 4 dígitos mediante el bucle for() sino 5. Desde i = 0 hasta i <= 4 son: {0,1,2,3,4} 5 repeticiones.

Y un consejo extra: no utilices system("pause") para hacer una pausa en el programa. Utiliza getchar() que pertenece a la biblioteca <stdio.h>.
296  Programación / Programación C/C++ / Re: por que me sale error en Int main me sale expected "or"before "int" en: 18 Junio 2020, 20:50 pm
Te corrijo sobre tu propio mensaje. Te he puesto en mayúsculas los errores y en minúscula las sugerencias o avisos.

Para otros códigos que pongas, utiliza las etiquetas de Código GeSHi.

Código
  1. #include <iostream> // Esta cabecera es para usar entrada/salida estandar de C++ (cout y cin). No la usas para nada
  2. #include <stdio.h> // Cabecera para printf() y scanf(). Esta es tipica de C, no de C++.
  3.  
  4. // Es mejor que las variables las declares de forma local en la funcion main()
  5.  
  6. unsigned int num1;
  7.  
  8. int num=1 // FALTA EL ;. AQUI ESTA EL PROBLEMA. Ademas no usas esta variable.
  9.  
  10. int main(){
  11.  
  12. printf("Quedate en casa"); // Deberias poner algun salto de linea "\n" para que no salga todo seguido
  13. printf("Dime un numero:");
  14. scanf(%u,&num1); // EL PRIMER ARGUMENTO VA ENTRE COMILLAS DOBLES "%u"
  15. if (num1==1){
  16.               // Aqui tambien deberias poner saltos de linea
  17. printf("***COMO PROTEGERNOS AL SALIR DE CASA ***");
  18. printf("1.coja la mascarilla");
  19. printf("2.coloquese en su boca");
  20. printf("3.pongase  atras de las orejas las tiras");
  21. printf("4.Coja unos guantes con mucho cuidado");
  22. printf("5.Si fuera posible utilizar un traje de proteccion ");
  23. printf("6.coloqueselos en las manos que cubra toda la mano ");
  24. printf("7.Evitar tocar manijas o culaquier cosa fuera de casa,no tocarse la cara ");
  25. printf("8.Mantener la distancia de por lo menos un metro de distancia");
  26. printf("9.Si es posible lavarse las manos frecuentemente");
  27. printf("***ASI ESTARA MAS PROTEGIDO CUANDO SALGA DE CASA***");
  28. }
  29. else { // Esto no tiene mucho sentido. Directamente comprueba si es un 1 o un 2 pero sin pedir otro numero.
  30. printf Dime otro numero ; // FALTAN PARENTESIS Y COMILLAS
  31. printf "Escribe otro numero"; // FALTAN PARENTESIS
  32. scanf(%u,&num2); // FALTAN COMILLAS DOBLES. Y num2 NO ESTA DECLARADO EN NINGUN SITIO
  33. if (num2==2){
  34.                        // Aqui tambien pondria unos saltos de linea en cada mensaje
  35. printf("***COMO PROTEGERNOS AL ENTRAR A CASA***");
  36. printf ("1.Colocar un tapete con desinfectante para desinfectar los zapatos");
  37. printf ("2.Tener un desinfectante para desinfectarnos la ropa,manos,mascarilla,de preferencia todo el cuerpo");
  38. printf ("3.Tambien desinfectar las cosas que traigamos con nosotros comida,etc ");
  39. printf ("4.Si es posible sacarnos la ropa e ir a dejar inmediatamente a lavar ");
  40. printf ("5.Lavarnos las manos minimo 20 segundos con aabundante agua y jabon ");
  41. printf ("6.Si fuera posible ir a darnos un baño para luego entrar a casa");
  42. printf ("7.Los alimentos tienen que estar bien cocidos y lavados ");
  43. printf ("***ASI ESTAREMOS MAS PROTEGIDOS AL ENTRAR A CASA ***");
  44. else
  45. printf "Error"; // FALTAN PARENTESIS
  46. }
  47. return 0;
  48. }
  49. }
297  Programación / Programación C/C++ / Re: AYUDA PROBLEMA C++ en: 15 Junio 2020, 21:42 pm
Lo primero, El_lentejas, cambia el titulo por algo m'as sugerente en vez de AYUDA PROBLEMA C++...

Esto no ayuda a los buscadores a indexar la respuesta...

Pon , "digitos y divisibilidad por primos, por ejemplo@...
Sí que es cierto que estaría bien poder identificar los temas del foro por su título en vez de tener que ir entrando a cada uno de ellos hasta encontrar el que estabas buscando pero está visto que los tópicos de "ayuda", "urgente",... no van a desaparecer. Hace poco creo que leí un tema en otro subforo sobre esto mismo.

Como tu dices, sólo hay uno.
Código:
$ gcc primes.c -o main && ./main
4130952867
----------

Lo que no sé es como has llegado a la conclusion de que hay más de uno con las "condiciones cuadradas". Aquí va mi idea.

La situación para que aparezca más de una solución es que como dije no se estaba tomando la condición de que el número tenía que contener cada dígito una vez, desde un principio. Entonces si nos fijamos únicamente en las condiciones que recuadré con la etiqueta code, siendo estas las condiciones de divisibilidad, hay dos números que las cumplen.

Claro que teniendo desde el principio en cuenta la otra condición de unicidad de los dígitos se puede exprimir mucho más el problema y llegar a una solución como la que muestras (que cuando tenga más tiempo le daré unas vueltecillas porque a mí no se me habría ocurrido hacerlo así  :xD)
298  Programación / Programación C/C++ / Re: Numero al azar capicua en: 15 Junio 2020, 18:49 pm
Uff, ese código es puro azar. Generas números aleatorios hasta que coincide que uno es capicúa. Además lo hace al revés. Según ese do while() lo que haces es generar números hasta que uno no es capicúa. La condición del while() es para que se repita, tendría que ser: (u != dm || d != um).

Lo suyo sería asegurar que es capicúa como te decía antes. Veamos:
Para empezar te vendría bien una función:
Código
  1.  
  2. int generarAleatorio(int minimo, int maximo){ // Devuelve un numero aleatorio en el rango [minimo, maximo]
  3.  srand(time(NULL)); // NULL es equivalente a 0. Lo puedes hacer aqui o antes de llamar a la funcion
  4.  int numero = minimo + rand() % (maximo - minimo + 1);
  5.  return numero;
  6. }

Y ahora creas un número aleatorio de 3 cifras. Lo más fácil es que crees los 3 primeros dígitos y agregues los 2 últimos después:
Código
  1. int numero = generarAleatorio(100, 999);
  2. int penultimoDigito = (numero / 10) % 10;
  3. int ultimoDigito = numero / 100;
  4. numero = numero * 100 + penultimoDigito * 10 + ultimoDigito;

Al final esa variable <numero> (si no me equivoco) contendrá siempre un número de 5 cifras capicúa.
Se puede hacer mejor, no hay duda, pero de esta manera ves cuál ha sido el procedimiento a seguir.
299  Programación / Programación C/C++ / Re: Numero al azar capicua en: 15 Junio 2020, 17:21 pm
Lo que tienes que tener en cuenta para que el número sea capicúa es que las cifras 4 y 5 sean iguales a la 2 y 1 respectivamente.
Por lo tanto puedes generar 3 dígitos al azar (los 3 primeros) y los 2 últimos siempre tendrás que obtenerlos en base a los 2 primeros dígitos generados antes aleatoriamente.

Si necesitas ayuda con el código en concreto, incluye el código que tengas hasta el momento entre etiquetas de Código GeSHi.
No se hacen tareas.
300  Comunicaciones / Redes / Re: Duda con ejercicio de redes en: 14 Junio 2020, 19:06 pm
Exactamente, tiene pinta de ser un error debido a la forma de expresarse.

Todo apunta a que el que ha escrito esa cuestión estaba intentando referirse a la primera subred generada después de la red principal (150.90.0.0). Y esta "primera subred" sí que sería la 150.90.8.0 y por tanto su primer host el 150.90.8.1.

Pero como ya digo, parece un error por la forma en que ha hecho referencia a la primera subred ya que como decís, realmente la primera subred es la que te dan como base.
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines