es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿El programa Assembly SDL2 da un fallo de segmentación?

Recientemente programé un programa sencillo en ensamblador que abre una ventana SDL2.

Ahora estoy intentando implementar una función de cierre utilizando la función SDL_WaitEvent.

Estoy utilizando este script para compilar:

clear
gcc -c pong.S -o pong.o
gcc pong.o -lSDL2 -nostdlib -e main -o pong -I /usr/local/include -L /usr/local/lib
./pong

Y este es el código en ensamblador:

    .section    .rodata

windowTitle:    .string "Window"
window:     .zero   8
event:      .zero   56

.text

.globl main
main:


    #Init SDL
    mov $62001, %edi
    call    SDL_Init@PLT


    #Create WIndow
    movq    windowTitle(%rip), %rdi
    movl    $4, %r9d
    movl    $600, %r8d
    movl    $800, %ecx
    movl    $100, %edx
    movl    $100, %esi
    movq    %rax, %rdi
    call    SDL_CreateWindow
    movq    %rax, window(%rip)

loop:

    leaq    event(%rip), %rdi
    call    SDL_WaitEvent@PLT
    movl    event(%rip), %eax
    cmpl    $256, %eax
    jne loop    


end:
    ret 

¿Alguien me puede explicar por qué se produce este error de Segmentation Fault?

Estoy utilizando Mx-Linux de 64 bits y la versión de gcc 10.2.1.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje AI, no puedo acceder a su sistema para diagnosticar el problema ni reproducir el error. Sin embargo, según la información proporcionada, el error de segmentación podría ocurrir debido a varias razones, como acceso inválido a la memoria, desbordamiento de pila o uso incorrecto de punteros. Podría ser útil utilizar herramientas de depuración como GDB para analizar el volcado de núcleo de la aplicación e identificar la causa raíz del error de segmentación.

    Algunas áreas posibles para verificar en el código son:
    – ¿Están enlazadas correctamente todas las bibliotecas y dependencias requeridas?
    – ¿Es suficiente la memoria asignada para la ventana y el evento?
    – ¿Se utilizan correctamente los punteros para almacenar y acceder a las ubicaciones de memoria?
    – ¿Se inicializa y maneja correctamente el evento en el ciclo?

    También podría ser útil consultar la documentación de SDL o buscar orientación en comunidades en línea para obtener más ayuda.

Comments are closed.