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 - Eternal Idol

#1721
Programación C/C++ / Re: problemilla en c++
5 Septiembre 2013, 14:09 PM
Ejemplo simple:
http://c.conclase.net/curso/?cap=024

Código (c++) [Seleccionar]
/* Función recursiva para cálculo de factoriales */
int factorial(int n) {
   if(n < 0) return 0;
   else if(n > 1) return n*factorial(n-1); /* Recursividad */
   return 1; /* Condicion de terminacion, n == 1 */
}
#1722
Programación C/C++ / Re: problemilla en c++
5 Septiembre 2013, 13:30 PM
Cita de: pABL012 en  5 Septiembre 2013, 12:13 PM
Vaya. Pues si, efectivamente estoy usando una función recursiva. Pero me parecería raro que fuese ahí el fallo porque únicamente le introduje unas variables nuevas que uso para comparar en condicionales...

Listo, el problema esta ahi sin duda, lo mas probable es que la condicion que hacia retornar sin llamarse a si misma a la funcion recursiva ya no se esta cumpliendo nunca.
#1723
Programación C/C++ / Re: problemilla en c++
5 Septiembre 2013, 08:58 AM
Un stack overflow no se produce en una linea util digamos, la ultima instruccion que mueva algo a la pila sera la que termine por explotar PERO el problema esta en todas las anteriores, dale un kb ffff para ver la pila completa. ¿Estas usando alguna funcion recursiva por casualidad?
#1724
Programación C/C++ / Re: problemilla en c++
3 Septiembre 2013, 19:26 PM
Acceder a un puntero invalido es un ejemplo pero no vale la pena teorizar en estos casos, lo que tenes que hacer es  depurar tu programa, te recomiendo usar el WinDbg.
#1725
Esta en la documentacion:

The lpServices parameter is a pointer to a buffer that receives an array of ENUM_SERVICE_STATUS_PROCESS structures.

typedef struct _ENUM_SERVICE_STATUS_PROCESS {
  LPTSTR                 lpServiceName;
  LPTSTR                 lpDisplayName;
  SERVICE_STATUS_PROCESS ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESS, *LPENUM_SERVICE_STATUS_PROCESS;

typedef struct _SERVICE_STATUS_PROCESS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
  DWORD dwProcessId;
  DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
#1726
Cita de: Álvaro G. Tenorio en  2 Septiembre 2013, 23:10 PM
Claro, strlen(); pretende ser una función universal estándar, la mía es una implementación casera ya tuve en cuenta el problema del límite de almacenamiento de unsigned char, por eso el array de caracteres que se toma del usuario es de 140 huecos. (suficiente para algo rapidillo, pero modificaré el código).

Es decir que la funcion no sirve mas que para este main ... bueno.
#1727
Mira EnumServicesStatusEx.


PD. GetProcessList es parte del ejemplo, las funciones que usa son las que puse antes.
#1728
No hace falta WMI.

CreateToolhelp32Snapshot
Process32First
Process32Next
CloseHandle

Ejemplo de MSDN:
Taking a Snapshot and Viewing Processes

#1729
Por algo strlen devuelve un size_t y no un unsigned char, tu funcion no podra devolver el valor correcto si la cadena es mayor a 255 caracteres.
#1730
Usar static en este caso esta mal desde el vamos, con un solo hilo es suficiente para que de resultados incorrectos. Proba a llamar a la funcion primero con la cadena "hola" y despues con la cadena "a". Lo primero que va a hacer en el segundo caso es comprobar que texto[4] (magnitud se inicializo a 0 y se incremento hasta 4 por hola y asi quedo para seguir siendo usada en la siguiente llamada) sea diferente de cero ... es decir un elemento invalido.