2014-09-23 19 views
7

Tôi có mã sau không hoạt động. Làm thế nào tôi có thể điền dữ liệu vào khối bộ nhớ của UnsafeMutablePointer? Các bufferSize là 1024. Tôi đã cố gắng để điền vào 0, 1, 2 ... 1023 vào bộ đệm.Swift: điền dữ liệu vào unsafeMutablePointer của loại UInt8 không hoạt động

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

for index in 0...bufferSize - 1 
{ 

    pbuffer[index] = UInt8(index) 

} 

Cảm ơn bạn!

+0

FYI, bạn có thể sử dụng [Half-Mở rộng phạm vi Toán tử] (https://developer.apple .com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html # // apple_ref/doc/uid/TP40014097-CH6-XID_128) thay vì 'bufferSize - 1' trong vòng lặp đó:' cho chỉ mục trong 0 ..

+1

Điều gì về mã đó không phù hợp với bạn? Kết quả mong đợi của bạn là gì và kết quả bạn đang nhận được là gì? –

+0

Cảm ơn bạn! Nó tiếp tục dừng ở dấu đóng "}" và hiển thị thông báo này: "Chủ đề 1: EXC_BREAKPOINT (mã = EXC_ARM_BREAKPOINT, subcode = 0xe7ffdefe". Tôi không có bất kỳ điểm dừng nào cả. Nếu tôi thay đổi bufferSize - 1 đến 10 , khối mã này có thể vượt qua.Tôi muốn điền dữ liệu 1, 2, 3 ... 1024 vào pbuff cho ứng dụng thử nghiệm của tôi – Nicole

Trả lời

8

Vấn đề của bạn không phải là UnsafeMutablePointer, mà đúng hơn là bạn đang cố gắng khởi tạo UInt8 với giá trị không phù hợp với nó; UInt8 có giá trị tối đa là 255. Vì vậy, tối đa bufferSize của 256, mã của bạn sẽ hoạt động tốt; ngoài ra, nó sẽ sụp đổ.

Tất cả những gì bạn cần làm để khắc phục sự cố này là sử dụng loại khác cho số UnsafeMutablePointer của mình. Nếu bạn muốn đi đến một bufferSize của 1024, một UInt16 sẽ làm việc tốt (tối đa giá trị 65535):

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

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

Vâng, đó là vấn đề! Cảm ơn bạn rất nhiều vì đã giúp đỡ! – Nicole

Các vấn đề liên quan