gpt4 book ai didi

ios - 创建104634个节点的链表时测试崩溃

转载 作者:行者123 更新时间:2023-11-30 12:35:36 24 4
gpt4 key购买 nike

我注意到一个有趣的行为。我一直在测试构建包含许多元素的链表的性能。由于某种原因,经过一定数量的释放后,测试会崩溃。

这是我的 LinkedList 实现:

class LinkedList<T> {
let data: T
var next: LinkedList?

init(data: T, next: LinkedList? = nil) {
self.data = data
self.next = next
}

func cons(_ data: T) -> LinkedList {
return LinkedList(data: data, next: self)
}
}

我正在使用 XCTest 库对此进行测试。我做了这个测试功能:

let number = 104633
func testPerformanceExample() {
self.measure {
var list = LinkedList<Int>(data: 5)
for i in 0..<number {
list = list.cons(i)
}
}
}

我花了相当多的时间试图弄清楚这个数字。看来,如果我尝试构造一个具有 104634 节点的 LinkedList,我会遇到 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7fff5a059ff8) 崩溃,并且调试导航器显示了 LinkedList.deinit 调用塔:

debug screenshot

另一件有趣的事情是,如果将列表移到测试函数之外,它不再崩溃:

var list = LinkedList<Int>(data: 5)

func testPerformanceExample() {
self.measure {
for i in 0..<self.number {
self.list = self.list.cons(i)
}
}
}

我很好奇为什么一长串的释放会导致崩溃。提前致谢!

编辑:

当您在 XCTestCase 外部运行代码时,也会发生此崩溃。我在 UIViewController 中有此代码:

class ViewController: UIViewController {
let number = 1046340
override func viewDidLoad() {
super.viewDidLoad()

let date = Date()
var list = LinkedList<Int>(data: 0, next: nil)
for i in 0..<number {
list = list.cons(i)
}
let timeInterval = Date().timeIntervalSince(date)

print(timeInterval)
}
}

最佳答案

我无法编译你的测试。 enter image description here

此代码适用于 100 倍的节点。我不认为 self 引用是你的问题,但它确实表明你正在使用旧的 Swift 版本。升级您的工具并重试。 enter image description here

关于ios - 创建104634个节点的链表时测试崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com