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

#1311
u = telegram_free_updates(u)
Ese código es extraño y se ve forzado y tienes muy en cuenta la buena voluntad del cliente de tu función, cuándo debería ser al revés y pensar en el peor de los casos.
Si esa persona hace lo siguiente
telegram_free_updates(u)
u seguirá apuntando a algún sitio.
Debería ser la función mismo la que llevara u a NULL.
Tendría que estar definida tal que así

void telegram_free_updates(Updates **updates) {
   Updates *u = *updates;
   if(u) {
       int i;
       for(i = 0; i < u->length; ++i)
           if(u->list[i])
               telegram_free_updates(&u->list[i]);
   }
   *updates = NULL;
}

Con esto la variable obtendrá el valor NULL.

Una cosa más. Para que esto tenga sentido entiendo que has definido Updates de la siguiente forma

typedef struct updates_t {
   /*
    * Aquí van definidos
    * campos para el uso
    * del programa
    */
   unsigned length;
   struct updates_t **list;
} Updates;

De nuevo el código me parece extraño pues el mismo tipo de datos contiene un array dinámico de sí mismo. De esta manera uno puede meter Updates dentro de Updates dentro de Updates... con lo que se pierde rápidamente el control de lo que ocurre.
Podrías implementar un tipo de dato contenedor de Updates, para que te sirviera de array dinámico, y el tipo Updates por otra parte. Con un struct anónimo tal que así

typedef struct update_t {
   /*
    * Aquí van definidos
    * campos para el uso
    * del programa
    */
} Update;

struct {
   unsigned length;
   Update **list;
} Updates;


Así te aseguras que solo hay un único array de Update en todo el programa.
#1312
C no es C++, aunque la gente se empeñe en que sí.
Es como decir que C# es C++ o JAVA.

Por una independencia de C. ¡¡¡ No mas nomenclaturas C/C++ !!!
#1313
What the?

Pues sí, los chicos de Canonical han portado BASH de su Linux a Windows 10 y éste ejecuta el entorno de forma nativa, como si fuera el propio Linux.
Este BASH viene con todo lo que se podría esperar de él: awk, sed, grep, vi, etc. y junto al gestor de paquetes apt así que se pueden descargar paquetes como emacs.

¿Qué os parece este acercamiento?

http://www.hanselman.com/blog/DevelopersCanRunBashShellAndUsermodeUbuntuLinuxBinariesOnWindows10.aspx
#1314
El programa debe ser solo basado en GUI, y si es así, va a tocar modificar mucho del código fuente para trasladar todas las funciones y opciones que se pueden configurar a switches, una GUI en modo texto, etc.
La página web te recomienda usar el programa con una estación de trabajo en vez de en el servidor porque se presupone que el servidor trabajará sólo en modo texto.
#1315
CitarRequirements
Logstalgia requires a video card supporting OpenGL. For this reason you should typically run Logstalgia on your workstation rather than on the web-server itself (unless your workstation is the web-server).

As Logstalgia is designed to playback logs in real time you will need a log from a fairly busy web-server to achieve interesting results (eg 100s of requests each minute).

An example access log is included.
Esto es lo que pone la web. Parece que tendrás que buscar otra aplicación.
#1316
Por lo que entiendo de tu código el control de las casillas vivas y muertas lo haces con el color de los píxeles.
Te sería más sencillo si separaras la lógica de la presentación: una tabla de X x X de bools o ints, según te vaya mejor.
Por otra parte el juego debe hacerse con dos tableros, uno con la representación y el otro será una copia para trabajar. Esto es así porqué el cálculo de la época actual debe hacerse según la época directamente anterior; si modificas la tabla de la que obtienes los datos el juego no tendrá el comportamiento esperado.
Debes tener en cuenta los límites del mundo: si estás calculando la esquina superior izquierda no puedes mirar que hay ni en la fila superior ni en la columna que está más a su izquierda porqué no existen, o puedes  juntar los límites haciendo que la izquierda se junte con la derecha y arriba con abajo.
#1317
El problema es que haces strcpy con destino a un caracter, no a la dirección de inicio de un array de carácteres. Es decir:
strcpy(out[0], argv[i + 1]); está mal.
out es el array, out[0] es un carácter (char).
lo que espera strcpy es
strcpy(out, argv[i+1]);
Y así con todos los demás arrays: in, pass y text.
#1318
El problema es que quieres cambiar constantes.

Fíjate que todos tus arrays son de cadenas, son constantes que se guardan en la zona de memoria de sólo lectura del programa. Cualquier intento en cambiarlas producirá un error de fallo de segmento.
Pues eso es lo que estás haciendo en las líneas que has mencionado. Con la función toupper estás intentando cambiar la primera letra de una cadena constante y el propio S.O. te lo impide.

Para solucionar esto de forma sencilla: crea una variable dinámica del tamaño de la palabra que querías acceder, teniendo en cuenta que además debes dar cabida al carácter nulo; copia la cadena dentro de la nueva variable; haz lo que querías hacer pero usando esta nueva variable; libera la memoria adquirida para esta variable.


/*** recuerda incluir #include <string.h> para que funcione esta solución ***/
char *s = malloc(strlen(decenas[tmp]+1) * sizeof(char));
strcpy(s, decenas[tmp]);
s[0] = toupper(s[0]); 
printf( "\n %s", s);
free(s);


O: crea una variable tipo char a la que meterás dentro el primer carácter de la cadena pero en mayúsculas; muestra por pantalla el contenido de esta variable; muestra por pantalla el contenido de la cadena a partir de la posición 1.


char m = toupper(decenas[tmp][0]);
printf("%c%s", m, &decenas[tmp][1]);
#1319
Muchos fallos tienen qur ver con arrays y sus elementos: haces asignaciones y comparacions a los arrays en vez de a los elementos que estoa guardan.
Por ejemplo pid es un array pero lo tratas como si fuera escalar en la orden
pid=fork()
#1320
Has puesto como argumento a la función,  el float, una variable que en verdad usas como local. Los argumentos no se deben usar para crear variables locales. Mal, queda aplazada la asignatura que cursas de C.
La llamada a la función espera a que le pases todos los argumentos que espera, el float incluido.
Otro: si haces promedio un float no hay razón por la que la función deba devolver un int.
Más: si todos los argumentos de una división són enteros C la considera una división entera y así guardará el resultado, aunque lo metas en un float.