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 Temas
Páginas: 1 2 3 4 [5] 6
41  Programación / Programación C/C++ / (Ayuda) Segmentation fault sin razón aparente en: 15 Junio 2016, 03:37 am
Hola, muy buenas. Os traigo una pregunta que me intriga demasiado. Tengo esta función:

Código
  1. void ignore_line(FILE *file) {
  2. if(NULL != file) {
  3. fprintf(stdout, "Ignoring line...");
  4. while(0 == feof(file) && '\n' != fgetc(file));
  5. /* Null instruction */;
  6. fprintf(stdout, "[OK].\n");
  7. }
  8. }

Pues resulta que al cabo de algunos usos me tira un segmentation fault (lo sé por el depurador de MinGW-w64). Esta es parte de la consola:

Código:
Ignoring line...[OK].
Ignoring line...[OK].
Ignoring line...[OK].
Ignoring line...[OK].
Warning: unrecognized command 'que'.
Material file name: material.mtl.
This model loader is not complete.
Ignoring line...[OK].
Warning: unrecognized command 'map_Ka'.
Material file name: material.mtl.
This model loader is not complete.
Ignoring line...[OK].
Ignoring line...
Program received signal SIGSEGV, Segmentation fault.
0x00007fffe971c49d in msvcrt!feof () from C:\WINDOWS\system32\msvcrt.dll

Como veis, hay un 'Ignoring line...' que no tiene su OK, por lo que tiene que ser en esta función donde se produce el error. También podéis observar que ya se había usado esta función sin que diera errores.



____________________________________________________
Nota posiblemente irrelevante:

Creo que el error se produce en esta parte del archivo:
Código:
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 13.12.2013 19:23:54

newmtl Material__29
Ns 10.000000
Ni 1.500000
d 1.000000
Tr 0.000000
Tf 1.000000 1.000000 1.000000
illum 2
Ka 0.588000 0.588000 0.588000
Kd 0.588000 0.588000 0.588000
Ks 0.000000 0.000000 0.000000
que 0.000000 0.000000 0.000000
map_Ka C:\Users\kakamaka\Desktop\TurboSquid\Minecraft\SabieDiamant\Textures\Blue5.png
map_Kd C:\Users\kakamaka\Desktop\TurboSquid\Minecraft\SabieDiamant\Textures\Blue5.png
"<<<<< AQUÍ. LA PARTE ENTRECOMILLADA NO ESTÁ EN EL ARCHIVO"
newmtl Material__27


Espero que haya dado todos los datos relevantes y que me puedan ayudar... Muchas gracias :DD
42  Programación / Programación C/C++ / [C](Consulta) Pregunta sobre si una característica es de ANSI C (sobre arreglos) en: 4 Junio 2016, 18:40 pm
Hola. Quería preguntar si el hecho de que un arreglo se apunte a si mismo es coincidencia o es una característica de ANSI C, es decir, la dirección del arreglo y la dirección a la que apunta el arreglo es la misma (al menos eso me pasa con MinGW-w64).

Código
  1. int arreglo[4];
  2.  
  3. if(arreglo == &arreglo) { // Siempre me da 'true'
  4.    ...
  5. }

Gracias
43  Programación / Programación C/C++ / [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica en: 29 Mayo 2016, 19:53 pm
Hola, hoy tengo una duda que me gustaría solventar.

¿ANSI C nos asegura que cuando un programa que finaliza bruscamente (con return en la función main), el programa libera la memoria dinámica, o eso solo ocurre dependiendo del sistema operativo?

Espero que se comprenda mi duda. Muchas gracias.
44  Programación / Programación C/C++ / [C] (Consulta) Mezclando punteros y arreglos. en: 16 Mayo 2016, 09:42 am
Hola, muy buenas. Para entender la duda, primero hay que mirar el trozo de código:

Código
  1. GLchar *(source[1]);

La duda que se me presenta es: ¿por qué la variable 'source' es un arreglo a punteros?

Digo por qué afirmo esto:
Si hago la siguiente asignación con el código de antes no me da error:
Código
  1. source[0] = data;

Pero si hago esta asigación con la variable creada con
Código
  1. GLchar (*source)[1];

Si que me da error. Más concretamente, el siguiente error:
Código:
error: assignment to expression with array type source[0] = data;

Les agradezco su ayuda. Estoy trabajando en C y a veces es un lío xD
45  Sistemas Operativos / Windows / Eliminar una carpeta que te dice 'Acceso Denegado' en: 10 Mayo 2016, 20:57 pm
Hola, muy buenas. Me gustaría saber cómo eliminar una carpeta en Windows. Al intentar eliminarla, sea con el típico 'Delete' o a través de la consola (con rmdir /q /s) no puedo eliminar una carpeta llamada Windows Journal.

Esta carpeta es de un programa preinstalado en Windows 8.1. No quiero esa aplicación en mi equipo, aunque pese poco, no la quiero porque es mi equipo. Digo todo esto para que no me pidan explicaciones de por qué quiero eliminarla.

He probado a ejecutar la consola con permisos de administrador pero aun así no funciona. Todo el rato me dice acceso denegado. También he intentado modificar los permisos de la carpeta, y aun siendo administrador, se supone que no puedo modificarlos. Aquí hay una captura:


(Siento si la imagen se cae...)

Lo curioso es que puedo CORTAR la carpeta a donde yo quiera (excepto a unidades extraibles, como no xD)

De verdad, no me gusta que siendo administrador, no pueda hacer algo tan trivial como eliminar un programa que no me gusta...

Muchas gracias
46  Foros Generales / Dudas Generales / (Duda matemática) Cuestión sobre los números primos en: 6 Mayo 2016, 02:50 am
Hola, muy buenas. Tengo una duda que se podría catalogar como matemática más que duda de programación.

El caso es que la manera que he visto más eficiente para saber si un número es primo en C es la siguiente:
(Código corregido)
Código
  1. unsigned int is_prime = 1, numero_a_comprobar = 2453564567U;
  2.  
  3. for(j = 2; is_prime == 1 && j*j <= numero_a_comprobar; j++)
  4.    is_prime = numero_a_comprobar%j != 0;
  5.  
  6. // Ahora 'is_prime' almacena si 'numero_a_comprobar' es primo

Mi duda es: ¿Por qué solo comprobamos los posibles divisores del número a comprobar con la condición 'j*j <= numero_a_comprobar'? Seguro que tiene una respuesta matemática, pero no la se...

Muchas gracias
47  Programación / Programación C/C++ / Duda sobre el typedef en las clases en: 20 Abril 2016, 18:59 pm
Hola, hoy presento una duda corta. Si en una clase tienes diversas definiciones de tipos, si estás tratando con un objeto, ¿puedes declarar una variable fuera de la clase del tipo que está definido en el objeto?

Código de ejemplo:
Código
  1. class Foo {
  2.    public:
  3.        typedef int tipo_entero;
  4.  
  5.    private:
  6.        /* Aquí las variables de la clase */
  7. };
  8.  
  9. ...
  10.  
  11. int main() {
  12.    Foo objeto;
  13.  
  14.    objeto.tipo_entero variable = 54;
  15.  
  16.    return 0;
  17. }

Evidentemente no estaría preguntando esto pudiendo proponer el ejemplo. Al intentar compilar el código de arriba me salta el siguiente error:
Código:
main.cpp: In function 'int main()':
main.cpp:12:12: error: invalid use of 'Foo::tipo_entero'
objeto.tipo_entero variable = 54;

Pues eso, me gustaría saber si se puede hacer lo que he preguntado. Muchas gracias anticipadamente!
48  Programación / Programación C/C++ / (Consulta) Problema con sobrecarga de operadores y plantillas en: 31 Marzo 2016, 20:50 pm
Introducción (se puede saltar): Hola, muy buenas. En mi afán por hacer una consola (no es por reinventar la rueda, es cosa de practicar :D) decidí hacerla usando OpenGL (suena raro, pero lo estoy consiguiendo XD).

____
El problema con el que me he topado es a la hora de sobrecargar el operador <<. Para sobrecargarlo, he hecho lo siguiente:

screen.h
Código
  1. class ConsoleScreen {
  2.    public:
  3.        // Algunos métodos...
  4.  
  5.        template <class T>
  6.        ConsoleScreen& operator<<(T value); // Prototipo del operador
  7.  
  8.    private:
  9.        // Varias variables...
  10.  
  11.        std::ostringstream m_cOutput;
  12.  
  13.        // Y más variables...
  14. }

screen.cpp
Código
  1. // Definición de los métodos...
  2.  
  3. template <class T>
  4. ConsoleScreen& ConsoleScreen::operator<<(T value) { // Aquí defino el operador
  5.    m_cOutput << value;
  6.    return *this;
  7. }

main.cpp
Código
  1. int main() {
  2.    // Inicialización de la consola, prueba de métodos...
  3.  
  4.    cConsole << "Checking operator\n"; // Aquí marca el error
  5.  
  6.    // Destrucción de la consola...
  7.    return 0;
  8. }

El error que aparece en la linea que he marcado es el siguiente:
Código:
||=== Build: Release in Texto (compiler: GNU GCC Compiler (x64)) ===|
obj\Release\main.o:main.cpp:(.text.startup+0x13c)||undefined reference to `ConsoleScreen& ConsoleScreen::operator<< <char const*>(char const*)'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Como ven, me aparece que no he definido la sobrecarga del operador (cuando se ve claramente que si). El error solo me aparece con el operador, no con los métodos. He probado a cambiar (dentro de template) 'class' por typename, pero me dice lo mismo.

Para probar también, he definido el operador simplemente con un const char*, y en ese caso si que ha funcionado:
Código
  1. ConsoleScreen& ConsoleScreen::operator<<(const char* value) { // Aquí defino el operador
  2.    m_cOutput << value;
  3.    return *this;
  4. }

Mi duda es: ¿Por qué me salta el error cuando uso plantillas?



Siento si la pregunta se hace larga de leer, pero no sé como podría resumirla más sin dar los datos que creo que son necesarios...
49  Programación / Programación C/C++ / (Consulta) Optimizando programas omitiendo los saltos de líneas en: 15 Marzo 2016, 23:42 pm
Hola, muy buenas. Haciendo un código me ha surgido una duda bastante importante a mi parecer. Según tengo entendido, una buena función es aquella que apenas tiene 'return'. Bien, pues yo quiero hacer una función con un diagrama de flujo como el siguiente:

Realizar Operación
Comprobar si ha salido bien
>> Ha salido mal
     Salir del programa
>> Ha salido bien
Realizar Operación 2º
>> Ha salido mal
     Salir del programa
>> Ha salido bien
Realizar Operación 3º
...
Y así sucesivamente hasta que todas las operaciones hayan terminado con éxito. Eso, en C++, sería algo así:

Código
  1. bool funcion() {
  2.    Realizar_Operacion_1();
  3.    if(Operacion_1_ha_tenido_exito() == false) {
  4.        return false;
  5.    }
  6.  
  7.    Realizar_Operacion_2();
  8.    if(Operacion_2_ha_tenido_exito() == false) {
  9.        return false;
  10.    }
  11.    Realizar_Operacion_3();
  12.    ...
  13.  
  14.    return true;
  15. }

Ahora bien, si tenemos en cuenta lo que dije al principio, este programa no sería el mejor porque tiene muchos saltos de línea 'return'. Entonces, otra forma de solucionarlo es así:

Código
  1. bool funcion() {
  2.    Realizar_Operacion_1();
  3.    if(Operacion_1_ha_tenido_exito() == false) {
  4.        return false;
  5.    } else {
  6.        Realizar_Operacion_2();
  7.        if(Operacion_2_ha_tenido_exito() == false) {
  8.            return false;
  9.        } else {
  10.            Realizar_Operacion_3();
  11.            ...
  12.        }
  13.    }
  14.  
  15.    return true;
  16. }

Pero este código se hace muy "ancho" cuando hay muchas operaciones a comprobar.

Entonces, lo último que se me ha ocurrido es lo siguiente:
Código
  1. bool funcion() {
  2.    bool error = false;
  3.  
  4.    Realizar_Operacion_1();
  5.    if(Operacion_1_ha_tenido_exito() == false) {
  6.        error = true;
  7.    }
  8.  
  9.    if(error == false) {
  10.        Realizar_Operacion_2();
  11.        if(Operacion_2_ha_tenido_exito() == false) {
  12.            error = true;
  13.        }
  14.    }
  15.  
  16.    if(error == false) {
  17.        Realizar_Operacion_3();
  18.        if(Operacion_3_ha_tenido_exito() == false) {
  19.            error = true;
  20.        }
  21.    }
  22.  
  23.    ...
  24.  
  25.    return error;
  26. }

Pero no lo veo muy bien, son muchos 'if' que no sé si son necesarios...

Me gustaría saber si saber de algún método mejor para realizar este tipo de diagramas de flujo... Gracias
50  Programación / ASM / (Consulta) ¿Por qué los procesadores de 16 bit solo pueden acceder a 1MB de RAM? en: 3 Enero 2016, 02:36 am
Yo sé que para acceder a la memoria, se que se usan dos registros de 16 bits (uno se aprovecha entero, y el otro se aprovecha parte, para así sumar 20 bits, de donde viene la limitación). La duda es, ¿por qué no usaron esos dos registros al completo para así poder tener segmentos de 4GB? Gracias
Páginas: 1 2 3 4 [5] 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines