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

#22
Hola, que tal.

Decirte que a mi también me interesa bastante la idea, y creo que puede estar muy bien para aprender.
Respecto a monolitico o micronucleo, en mi opinion creo que es mejor que sea el so quien gestione el hardware.

La verdad es que me gustaría bastante participar.

Saludos

#24
Gracias Littlehorse, me ha quedado todo bastante claro.
Hace un tiempo me entraron dudas de este estilo, y decidi aprender lenguaje asm para poder debuguear bien una aplicación, ver lo que ocurría paso a paso y estas cosas, pero desgraciadamente todavia no dispongo del tiempo suficiente.

Aun así, me has aclarado bastantes dudas, ahora se un poquito más =).
Pongo [SOL] en el estado, como para decir que esta solventado.

Gracias, y saludos!
#25
Bueno, según he leido tiene algunos bindings para C, aunque si, la mayoria de webs en donde he leido desechan la opción de usar C+QT.
#26
Segun he leido, QT no permite bien hacer aplicaciones escritas en C, es más orientado a C++.
Yo uso GTK+ y la verdad es que va bastante bien. La documentación puedes encontrarla aqui: http://library.gnome.org/devel/gtk-tutorial/stable/

Saludos
#27
Cita de: Littlehorse en  2 Diciembre 2010, 19:50 PM
En el archivo de cabecera string.h, tenes varias funciones que retornan direcciones. Podes revisarlas y veras un pequeño espectro de para que se puede utilizar, pero la verdad es que se pueden usar con múltiples objetivos, al igual que los punteros se pueden utilizar para infinidad de cosas, lo mismo aplica para el retorno de una dirección, ya que en reglas generales son conceptos que van ligados.

He mirado el fichero string.h, pero sinceramente no he podido encontrar lo que decias. Quizás es que yo ya me estoy confundiendo, pero es lo mismo retornar un puntero que una variable por referencia, me refiero a algo asi:

int *ejemplo(void)
{
   int *i = NULL;

   i = (int *)malloc(1*sizeof(int));
   *i = 4;

   return i;

}

int *ejemplo2(void)
{
   int i = NULL;

   i = 4;

   return &i;

}


Se que no es es muy buen ejemplo, ya en el primer ejemplo la variable i se crea en el heap, i en el segundo en el stack de la funcion. Lo que venia a decir es que en ambas funciones estamos retornando direcciones de memoria, no?

Aun así, muchas gracias, me quedaron claros algunos pilares basicos.

Saludos
#28
Fijate en esto:

while(aux != NULL) {
               aux = aux->next;
       }


Estas comparando si el puntero aux es NULL, pero luego asignas aux->next a aux, que si que puede apuntar a NULL.

Ahora su codigo hace:

while(aux->next != NULL) {
               aux = aux->next;
        }


Antes de asignar aux->next a auxt, comprueba que aux->next no sea un puntero invalido.

Saludos
#29
Gracias Littlehorse, me has aclarado bastante el tema.


Entonces, si lo he entendido bien sería algo asi:

pila cuando llamas a la funcion:

funciones_automaticas
------------
direccion_a_donde_retornar
------------
parametros_si_hay



pila antes de salir de la funcion:

valor_de_i (2)
-------------
direccion_a_donde_retornar



Si estoy en lo cierto, lo que se copia en la pila antes de salir de la función, es el valor que contiene i, y no la variable i como tal.
Por otro lado, cuando devuelves a i por referencia, lo que estas haciendo en realidad es devolver la dirección de memoria donde se encuentra i, y como esos datos son machacados al salir de la pila, en la dirección de i puede haber cualquier cosa.

Lo que no entiendo muy bien es en que casos se usa ese metodo. He leido bastantes manuales de C, he visto bastante codigo, y jamás he visto devolver a una variable por referencia. Me suena de que en C++ se hace para según que necesidades, pero en C no se donde radica su uso. ¿Quizá era solo a modo de ejemplo?

Gracias =), se me va iluminando la cosa.
#30
Gracias a ambos por la contestación.

Lo que no acabo de tender es esto, imaginemos el siguiente codigo:
int pon(void)
{
    int i = 2;

    return i;

}

void pon2(void)
{

    char buffer[BUFSIZ];
    int i = 0;

    for(; i < BUFSIZ -1 ; i++)
        buffer[i] = 'a';

}

int
main(int argc, char **argv)
{
    int a = 3;


    a = pon();
    printf("%d\n", a);
    pon2();
    printf("%d\n", a);

    return 0;
}


Segun lo que tengo entendido, al llamar la funcion pon(), se pone en la pila sus parametros, la dirección de retorno y las variables automáticas.
Una vez se sale de la función, el espacio que se guardo para las variables de la función se libera, y entonces según esto no debería poder ver el valor de la variable "i", no?

Quiero decir, estoy devolviendo una variable que cuando salgo de la funcion, se "destruye". No logro comprender por qué puedo pasar su valor.
Llevo algunos días liado con esto, he leido algun que otro artículo acerca de como funciona el stack y creo entenderlo, pero no comprendo este comportamiento.

He intentado crear otra función con un poco mas de almacenamiento, para a ver si así dejaba de ver el valor de "i", pero no.

Muchas gracias de antemano