2014-09-23 109 views
7

我有下面的代碼不起作用。我如何將數據填入UnsafeMutablePointer的內存塊? bufferSize是1024.我試圖將0,1,2 ... 1023填充到緩衝區中。Swift:將數據填充到UInt8類型的unsafeMutablePointer不起作用

let pbuffer = UnsafeMutablePointer<UInt8>.alloc(bufferSize) 

for index in 0...bufferSize - 1 
{ 

    pbuffer[index] = UInt8(index) 

} 

謝謝!

+0

僅供參考,您可以使用[半開區間操作(https://developer.apple在for循環中:'for index in 0(.sys/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#// apple_ref/doc/uid/TP40014097-CH6-XID_128)而不是'bufferSize - 1' .. 2014-09-23 18:58:13

+1

那該怎麼樣的代碼不適合你?你期望的結果是什麼?你得到的結果是什麼? – 2014-09-23 19:00:46

+0

謝謝!它繼續停在括號「}」處並顯示以下消息:「線程1:EXC_BREAKPOINT(code = EXC_ARM_BREAKPOINT,subcode = 0xe7ffdefe」)。我沒有任何中斷點。如果將bufferSize - 1更改爲10 ,這個代碼塊可以通過,我想在我的測試應用程序的pbuff中填寫數據1,2,3,...... – Nicole 2014-09-23 20:05:32

回答

8

你的問題不是UnsafeMutablePointer,而是你試圖用一個不適合它的值初始化一個UInt8; UInt8的最大值爲255。所以,最多bufferSize256,您的代碼將正常工作;除此之外,它會崩潰。

所有你需要做的,以解決這個問題是使用不同的類型爲您的UnsafeMutablePointer。如果你想要去的最多的一個1024bufferSize,一個UInt16將正常工作(最大值65535):

let bufferSize = 1024 
let pbuffer = UnsafeMutablePointer<UInt16>.alloc(bufferSize) 

for index in 0..<bufferSize 
{ 
    pbuffer[index] = UInt16(index) 
} 
+0

是的,這是問題!非常感謝你的幫助! – Nicole 2014-09-23 20:38:02

相關問題