[英]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.