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 - Littlehorse

#491
Citar¿pero si se quita sigue funcionando el programa igualmente?

Por supuesto, pero se utiliza para dar un margen mínimo de tiempo. Es simplemente una precaución que no debería molestar al menos que el caso amerite ahorrar tiempo de donde sea.

Citarwaitreturn = wait (&status);
while ( (waitreturn !=-1) || (waitreturn == -1 && errno == EINTR))
waitreturn = wait (&status);


Wait retorna el pid del hijo que termine. Luego dice que retorna 0 ¿si no retorna ninguno y ninguno esta disponible? No se que quiere decir eso... y luego -1 si hay error.

¿esta esperando procesos hijos hasta que wait retorne -1 y errno != EINTR? ¿por que?

wait suspende la ejecución del proceso actual en pos de esperar que un hijo finalice, una señal sea entregada, o se decida finalizar el proceso actual.
En este caso estas interpretando mal el código, el significado seria:

Mientras wait no retorne error O (wait retorne error Y errno este establecido como EINTR)

Tal que EINTR establecido implica:

CitarEINTR
    if WNOHANG was not set and an unblocked signal or a SIGCHLD was caught.

CitarEl otro tampoco lo entiendo... ¿childpid que toma 0 o 1 y lo compara con el wait?
Bueno a ver si puedes aclarar esto

childpid==0 equivale a decir "Soy un proceso hijo". Mientras childpid != wait.

Relaciona eso con el valor de retorno de wait:

Citar
The process ID of the child which exited, or zero if WNOHANG was used and no child was available, or -1 on error (in which case errno is set to an appropriate value).

Saludos
#492
Programación C/C++ / Re: Duda con %i
2 Septiembre 2010, 17:19 PM
Si que hay riesgo, es tal como dice EI. Acceder a una dirección invalida produce comportamiento indefinido, tales como corrupción de datos, errores en tiempo de ejecución, etc.

Por ejemplo:

printf("%s");


Saludos
#493
Revisa el ejemplo de la MSDN. Si todavía quedan dudas luego de la lectura, postealas nuevamente.

Saludos
#494
De nada ;D. El programa del screen es Cheat Engine que para este caso vale perfectamente, pero para el resto lo ideal es WinDBG.

Con Cheat Engine: Memory view + (ctrl +R)

Con WinDBG: !address -summary
                     !address Addr
 
Saludos!                    
#495
VirtualAlloc mas direcciones hardcodeadas, no es la mejor combinación. ;D

Cuidado con los 0 de mas y de menos en las direcciones, que a simple vista ya se ven errores:

Código (cpp) [Seleccionar]

if(Buffer.State==MEM_COMMIT)
{
if(!VirtualFree((LPVOID)0x0040000,0x1000,MEM_DECOMMIT))


0x0040000!=0x00400000

Código (cpp) [Seleccionar]
case MEM_RESERVE|MEM_COMMIT:

Ese case esta de mas.

Código (cpp) [Seleccionar]
VirtualFreeEx(GetCurrentProcess(),(LPVOID)0x00400000,0,MEM_DECOMMIT);

Si utilizas decommit en una región de memoria sin utilizar release, esta cambia su estado a reservado , o sea, lista para asignar (Suponiendo que sea posible).
Por ende, la llamada a VirtualAllocEx va a fallar del modo que estas usando, porque estas intentando reservar una dirección que ya esta reservada. Asignarla es lo que debería seguir.

Código (cpp) [Seleccionar]
VirtualAllocEx(GetCurrentProcess(),ADR,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);




Antes de seguir, busca los artículos de Mark Russinovich acerca de todo esto ya que explican todo con lujo de detalle. Y sobre todo atención a los "remarks" de la documentación de cada API, porque es eso lo que te esta trayendo dramas. ;D.

Cabe destacar también, que el proceso real que debería realizarse es mucho mas largo, porque esto vale como ejemplo pero en una aplicacion no podes dejar pasar cosas como las posibles medidas de protección de cada región.

Tengo por acá un código que quizas te pueda servir ya que realiza lo que necesitas, es bastante largo y pesado pero de seguro sacas en limpio lo necesario. En un rato lo busco y si lo encuentro te lo mando por pm.

Saludos
#496
Podría ser por varios motivos, difícil de saber si ni siquiera la reinstalación ha solucionado el problema.

Lo que te recomendaría es que pruebes un entorno de trabajo mas estable como Code::Blocks.
#497
Programación C/C++ / Re: Problema con programa...
1 Septiembre 2010, 02:56 AM
Código (cpp,2,12,13) [Seleccionar]
#include <iostream>
int main()// Valor de retorno debe ser un entero.
{
using namespace std;

int segundos;
cout << "Ingrese una cantidad de segundos" << endl;
cin >> segundos;
cout << "Ingresaste :";
cout << segundos << endl;
cout << "Presione enter para continuar." << endl;
cin.ignore();//Descartas datos innecesarios que puedan existir en el buffer
cin.get();//Esperas que se presione una tecla.
return 0;
}


Utiliza el buscador del foro, podrás encontrar varios hilos que explican distintas formas de hacer pausas, que debería usarse, que no, etc.

Saludos
#498
Es necesario utilizar una dirección fija que posiblemente pueda no estar libre, o solo es por probar?

Utiliza VirtualQuery para chequear el estado de la región, o en su defecto VADUMP.

Saludos
#499
Programación C/C++ / Re: rand() algo prohibido
31 Agosto 2010, 23:30 PM
Ademas de lo que dijo rob1104, cabe destacar que la constante RAND_MAX depende de la plataforma.



He borrado y reportado algunos mensajes. Si no saben comportarse por favor, no posteen.

#500
CitarSe aprende sin ir a la universidad?

Depende el esfuerzo y las ganas. Las bases del lenguaje se aprenden de manera mas fácil en la universidad debido a la metodología organizada de enseñanza y el estudio obligado para rendir los exámenes. Pero en definitiva, depende de que universidad, y depende la persona. Algunas personas aprenden mas rápido en sus casas yendo a su ritmo que teniendo que atenerse al método del establecimiento educativo.

Pero en fin, mientras se tenga el material adecuado y ganas, se puede aprender en cualquier lado.

CitarSe llega leyendo tutoriales, viendo videos, haciendo pruebas?

Seguro, pero mas que tutoriales y vídeos, lo ideal es un buen libro que explique desde cero.

CitarLa matematica es la 1° Herramienta para triunfar?

Depende, en general tener unos buenos conocimientos en matemática implica mas capacidad para resolver problemas y mejores ideas a la hora de codificar algoritmos. Mal o bien, la matemática estimula bastante la capacidad resolutiva de una persona.
También es verdad que hay muchas áreas de programación donde la matemática necesaria es muy básica, así como también existen otras áreas donde la complejidad es otra y se necesita una base solida sobre algunos conceptos. Todo depende de lo que quieras hacer.

De cualquier manera, la matemática te ayuda en mayor o en menor medida en todas las áreas de la vida y por sobre todas las cosas la vas a necesitar si tenes pensado encaminarte a una carrera universitaria.

Saludos