Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - class_OpenGL

#361
Si no he entendido mal, lo que quieres hacer es guardar la estructura 'persona' como binario en un archivo. La estructura es
Código (cpp) [Seleccionar]
typedef struct {
char nombre[MAX];
int renta;
float nota;
}lista;


Bien, si ese es el objetivo, hay un error. El problema es que cuando guardas la estructura en un archivo copiada de byte a byte, cuando copias la variable 'nombre', en realidad estás copiando la dirección de memoria donde reside el primer byte de la cadena.

Por ejemplo, declaro el siguiente objeto:

Código (cpp) [Seleccionar]
lista persona;

persona.nombre = "Esto es un nombre";
persona.renta = 14000;
persona.nota = 5;


Bien, ahora la estructura, a nivel de bits, se vería (por ejemplo), así:
0xF4567E22 // Dirección de memoria
0x000036B0 // 14000
0x00000005 // 5


Como ves, en ningún sitio aparece el nombre como tal. Entonces, lo que tendrías que hacer es primero hacer un "write" con la cadena del nombre, y luego tendrías que guardar tanto la renta como la nota en binario... Puedes usar el siguiente fragmento:

Código (cpp) [Seleccionar]
archivodat.write(persona.nombre, MAX);
archivodat.write(reinterpret_cast<const char*>(&persona.renta), sizeof(int) + sizeof(float));
#362
Programación C/C++ / Re: Duda sobre error
18 Enero 2016, 00:15 AM
El método de la clase ifstream getline, según los estándares, está definido así:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );


Tiene dos sobrecargas, y ninguna coincide con la que has usado. Para solucionarlo, tienes que poner el tamaño de la cadena de caracteres como parámetro:

Código (cpp) [Seleccionar]
f.getline(texto[i], MAX_LONG_LINEA)

He deducido que deberías poner texto por el for en el que está:

Código (cpp) [Seleccionar]
for(int i = 0; i<MAX_LINEAS; i++){
    f.getline(texto[i], MAX_LONG_LINEA);
    nLineas++;
}
#363
No sé que pasa con los antivirus... He dicho eso porque hubo casos parecidos (pero no iguales) hace tiempo...
#364
Sinceramente, el mensaje se podría resumir mucho. No he visto casos similares al comentado.

Lo que se me ocurre es que abras la consola, copies la ruta del archivo ejecutable y la pegues en la consola.
Por ejemplo, supongamos que el archivo está en "C:\Ejercicios\Ejecutable.exe", entonces:
1) Copiala entera (incluido el nombre del ejecutable con la extensión)
2) Abre la consola. Si no sabes como hacerlo, lo único que tienes que hacer es darle click derecho sobre el menú de inicio, y dale a "Símbolo del sistema" (si puedes, dale a la opción con administrador).
3) Abre comillas ("), pega la ruta haciendo "Click derecho -> Pegar", cierra comillas y pulsa enter. En el ejemplo, quedaría así: "C:\Ejercicios\Ejecutable.exe"

Ahora cuéntanos si el programa se ha ejecutado o el programa se ha quedado colgado.

Nota:
-- En el caso de que se haya quedado colgado, puedes probar a desactivar el antivirus y volver a ejecutar el programa.

PD.:
Cita de: SerronSegún tengo entendido, este error solamente surge cuando ya hay algo ejecutándose en la misma ruta
Ahí tienes razón. El programa, en teoría, se está ejecutando
#365
Programación C/C++ / Re: Programa en C
4 Enero 2016, 14:43 PM
No soy un entendido en malware, pero creo que la principal forma de enviar virus de forma masiva es crearlos para Windows. Este sistema operativo es el más común en los ordenadores personales. Ahora bien, no sé si habrá más técnicas para distribuir también a otros sistemas operativos
#366
Vaya, eso no lo leí xD Muchas gracias por todas tus respuestas!!
#367
Cita de: Wikipediasegment:offset, typically in hexadecimal notation. In real mode, in order to calculate the physical address of a byte of memory, the hardware shifts the contents of the appropriate segment register 4 bits left (effectively multiplying by 16), and then adds the offset.

For example, the logical address 7522:F139 yields the 20-bit physical address:
75220 + F139 = 84359

Eso creo que lo entiendo. Mi duda es que si se podría hacer hecho que una dirección de 32 bits lineal se dividiese en dos y se guardase en registros de 16 bits individuales. Cada parte de esa dirección no tendría porque tener un significado (tales como selector y desplazamiento). A lo mejor no capto la idea global y me estoy haciendo un lío yo solo xD
#368
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
#369
Lo que dices es dependiente del sistema (Windows, sistemas Unix, MacOS...). Tienes que especificar un lenguaje para que podamos ayudarte.

He buscado en Internet, y en este hilo han respondido a tu misma pregunta.

http://stackoverflow.com/questions/4052940/how-to-make-an-opengl-rendering-context-with-transparent-background
#370
MAFUS - O podrías cargar el archivo en memoria, y después reescribir el archivo


Prueba con el siguiente enlace:
https://foro.elhacker.net/programacion_cc/crear_un_el_archivo_ya_existe_iquestdesea_sobreescribir-t104017.0.html;msg483023