0

我生成了一个介于 0 到 256 之间的随机整数数组,我尝试使用插入排序对它们进行排序,但是在沿线的某个时刻我搞砸了,并得到一个错误“分段错误(核心转储)

我不知道我为什么会得到这个,但我相信这个问题与代表循环计数器的宏 j 有关。我已经为此工作了几个小时,并且已经坚持了一段时间。

编辑:使用调试器后,我将问题隔离为:

bl printf

就在它尝试打印第二个排序值的最后。

我尝试分配更多内存,最多 416 字节,我尝试移动 top2 循环标签(这是使用 j 作为计数器的循环),我得到的最远的是让程序打印第一个元素排序数组,然后给出错误

ALLOC   =-(16+400*1)&-16
        .equ    DEALLOC, -ALLOC
size    = 50
define(arraybase, x19)
i       .req    x20
define(j, x21)
define(temp, w22)
define(sort1, w23)

print1: .asciz "Array[%d]: %d\n"
print2: .string "\nSorted Array: \n"
print3: .asciz "top value equals %d \n"

...

        mov     i, 0

top1:   add     i, i, 1
        ldrb    temp, [arraybase, i ]

        mov     j, i
top2:   mov     x25, j
        sub     x25, x25, 1

        ldrb    sort1, [arraybase, x25 ]
        cmp     temp, sort1
        b.ge    skip1
        strb    sort1, [arraybase, j]
skip1:  sub     j, j, 1

        cmp     j, 0
        b.gt    top2

        strb    temp, [arraybase, j]
        cmp     i, size-1
        b.lt    top1

printing:

        ldr     x0, =print2
        bl      printf

        mov     i, 0
        ldr     x0, =print1

tprint: mov     x1, i
        ldrb    w2, [arraybase, i]
        bl      printf
        add     i, i, 1
        cmp     i, size-1
        b.le    tprint


        mov     x0, 0
        ldp     x29, x30, [sp], DEALLOC
        ret

数组应该以它初始化的随机顺序打印,然后它应该打印数组顶部的值,然后它意味着以升序打印排序的数组。

我得到的确切错误信息是:

分段错误(核心转储)

这出现在它打印排序数组的第一个值之后

4

0 回答 0