簡體   English   中英

生成巨大的隨機數時出現malloc錯誤

[英]malloc error when generating huge random number

我想得到一個從0到大數(2 ^ 31)的隨機元素。

我試圖創建一個Array從這樣一個Range (這樣我就可以使用SWIFT的Array.randomElement ),為完成

let myArray: [Int64] = [Int64](0...4294967292)

哪個編譯,但崩潰:

MyPoject(1569,0x100cc2f40)malloc:無法分配區域mach_vm_map(size = 34359738368)失敗(錯誤代碼= 3)MyProject(1569,0x100cc2f40)malloc:在malloc_error_break中設置斷點以進行調試

當然,我可以編寫一個自定義函數來創建數組,但這有點氣味,特別是因為數組每次都是完全相同的。

Swift能提供更好的解決方案嗎?

錯誤消息

malloc:無法分配區域mach_vm_map(size = 34359738368)

告訴我運行時無法分配32GB內存 - 這就是4294967292 64位整數的數組所需要的

let myArray: [Int64] = [Int64](0...4294967292)

但是沒有必要為此目的創建一個數組。 從Swift 4.2開始,您可以直接致電

let rnd = Int64.random(in: 0...4294967292)
// or
let rnd = Int64.random(in: 0..<4294967293)

使用其中之一

static func random(in range: ClosedRange<Self>) -> Self
static func random(in range: Range<Self>) -> Self

FixedWidthInteger協議的方法。

最后請注意, 4294967292不是2^31 = 2147483648 - 如果打算在0 (包括)到2^31 (不包括)的范圍內創建一個隨機數,那么

let rnd = Int32.random(in: 0...Int32.max)

會訣竅。

ClosedRange在Swift 4.2中也有一個randomElement方法:

print((0...4294967292).randomElement()!)

請注意,您說您想要一個介於0和2 ^ 31之間的隨機數,但在您的示例中使用了1...4294967292而不是0...4294967292

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM