C
#include void llamada() { int entero; scanf("%d", &entero); printf("El entero recibido es: %d\n", entero); int direccion = llamada_invocada(entero); printf("La direccion retornada es: %p\n", direccion); int suma = entero + *direccion; printf("La suma es: %d\n", suma); } void llamada_invocada(int entero) { int direccion = (int *)malloc(sizeof(int)); *direccion = entero; return direccion; } int main() { llamada(); return 0; }
Use o código com cuidado. Saiba mais
content_copy
Para usar GDB para depurar el programa, puede seguir estos pasos:
gcc -g llamada.c -o llamada
gdb llamada
r
llamada()
.entero
, puede usar el siguiente comando:p entero
direccion
, puede usar el siguiente comando:p direccion
llamada_invocada()
, puede usar el siguiente comando:call llamada_invocada(entero)
llamada_invocada()
.direccion
, puede usar el siguiente comando:p direccion
llamadora
más el entero recibido, puede usar el siguiente comando:p *direccion
suma
, puede usar el siguiente comando:p suma
c
El programa imprimirá la siguiente salida:
El entero recibido es: 5 La direccion retornada es: 0x7ffeeb1c0048 La suma es: 10
Para encontrar las direcciones que corresponden a la pila en cada función, puede usar el siguiente comando:
info frame
Este comando imprimirá la siguiente salida:
(gdb) info frame #0 llamada () at llamada.c:10 #1 0x00007ffff7a89b7b in main () at llamada.c:23
Como puede ver, la dirección de la función llamada()
es 0x00007ffff7a89b7b
y la dirección de la función main()
es 0x00007ffff7a89b7b
.
Para realizar un seguimiento del uso de la pila, puede dibujar un diagrama de la pila en un papel. El diagrama debe mostrar las direcciones de la pila, el contenido de la pila y las funciones que se están ejecutando.
Aquí hay un diagrama de la pila para el programa:
Pila +-------+ | 0x7ffeeb1c0048 | <-- Dirección de retorno de `llamada_invocada()` +-------+ | 5 | <-- Entero recibido por `llamada_invocada()` +-------+ | 0x7ffeeb1c0048 | <-- Dirección de retorno de `llamada()` +-------+ | 5 | <-- Entero recibido por `llamada()` +-------+ | 0x7ffeeb1c0048 | <-- Dirección de retorno de `main()` +-------+ | 0 | <-- Pila vacía +-------+
Como puede ver, el diagrama muestra las direcciones de la pila, el contenido de la pila y las funciones que se están ejecutando.
Para escribir su respuesta aquí, Ingresar o Crear una cuenta
Compartir