Strange stackoverflow behavoir

I need help understanding what is going on here.
I make a linked list where each node just have one Int
and a linked list where each node has an IntArray of 262144 random Ints to equal a megabyte

Ok then I call each to make too many on purpose to cause a stackoverflow
the one Int linked list fails as I would expect.
The Big array linkedlist fails on multiple calls. This doesn’t make sense.
Here is the code

const val megabyteLength = 262144
fun largeUnoptimalArray() = IntArray(megabyteLength) { (0..99999).random() }

data class LL(val data:IntArray= intArrayOf(), var next:LL?=null)

fun  createList(length: Int, num: Int = 0, data:()->IntArray):LL {
    try {
        val node = LL(data = data())
        if (num < length) node.next= createList(length,num+1,data)
        return node
    } catch (e:StackOverflowError) {
        println("createList failed on $num")
    }
    return LL()
}

fun main(args: Array<String>) {
    createList(Int.MAX_VALUE) { intArrayOf() }
    createList(Int.MAX_VALUE, data = ::largeUnoptimalArray)
}

Here is the output

> Task :MainKt.main()
createList failed on 5990
createList failed on 12454createList failed on 12453createList failed on 12452createList failed on 12451createList failed on 12450createList failed on 12449createList failed on 12448createList failed on 12447createList failed on 12446createList failed on 12445createList failed on 12444createList failed on 12443createList failed on 12442

I have so make questions about this output.

  1. Why are the not the same size? (and the larger array creates more stack calls?)
  2. Why are multiple calls triggering stackoverflow. If call 12442 is out of stack, how can it call 12443 and so on
  3. Why does the newline character disappear on this output?