2014-11-12 1 views
0
let P: UInt32 = 0xB7E15163 
let Q: UInt32 = 0x9E3779B9 
let r = 20 

var S:[UInt32] = Array(count: 2*r+4, repeatedValue: 0) 

S[0] = P; 


for i in 1...2*r+3 { 
    S[i] = S[i-1] + Q 
} 

닫는 괄호가있는 코드의 마지막 줄에 오류가 발생합니다. 내가 왜이 오류가 발생하는지 잘 모르겠다. 누군가가 크게 도움을 줄 수 있다면 도움이 될 것이다. i = 1 들어스위프 EXC_BAD_INSTRUCTION을 반복하여 배열 채우기

thread #1: tid = 0x11615, 0x000000011ae465ed $__lldb_expr359`__lldb_expr_359.generateKeys() -> Swift.Array<Swift.UInt32> + 4509 at playground359.swift:30, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 
    * frame #0: 0x000000011ae465ed $__lldb_expr359`__lldb_expr_359.generateKeys() -> Swift.Array<Swift.UInt32> + 4509 at playground359.swift:30 
    frame #1: 0x000000011ae4538e $__lldb_expr359`top_level_code + 910 at playground359.swift:51 
    frame #2: 0x000000011ae46831 $__lldb_expr359`main + 49 at <EXPR>:0 
    frame #3: 0x000000010eedc510 RC6`get_field_types__XCPAppDelegate + 160 
    frame #4: 0x000000010eedd081 RC6`reabstraction thunk helper from @callee_owned() -> (@unowned()) to @callee_owned (@in()) -> (@out()) + 17 
    frame #5: 0x000000010eedbcf1 RC6`partial apply forwarder for reabstraction thunk helper from @callee_owned() -> (@unowned()) to @callee_owned (@in()) -> (@out()) + 81 
    frame #6: 0x000000010eedd0b0 RC6`reabstraction thunk helper from @callee_owned (@in()) -> (@out()) to @callee_owned() -> (@unowned()) + 32 
    frame #7: 0x000000010eedd0e7 RC6`reabstraction thunk helper from @callee_owned() -> (@unowned()) to @callee_unowned @objc_block() -> (@unowned()) + 39 
    frame #8: 0x000000010f524abc CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
    frame #9: 0x000000010f51a805 CoreFoundation`__CFRunLoopDoBlocks + 341 
    frame #10: 0x000000010f519fc3 CoreFoundation`__CFRunLoopRun + 851 
    frame #11: 0x000000010f519a06 CoreFoundation`CFRunLoopRunSpecific + 470 
    frame #12: 0x000000010f5c62c1 CoreFoundation`CFRunLoopRun + 97 
    frame #13: 0x000000010eed9dcd RC6`top_level_code + 3629 
    frame #14: 0x000000010eedc53a RC6`main + 42 
    frame #15: 0x00000001121f7145 libdyld.dylib`start + 1 

답변

0

,

S[1] = S[0] + Q = 0xB7E15163 + 0x9E3779B9 

의 결과에 따라서, 프로그램을 중지, UInt32로서 표현할 수 없다.

당신은 "오버 플로우"또는 "랩 어라운드"(Objective-) C에서, 당신은 에이 같은 "오버 플로우 연산자"를 지정 &+을 명시 적으로 추가하려면 다음

S[i] = S[i-1] &+ Q 

자세한 내용을 자세한 내용은 Swift 설명서의 "Advanced Operators"에서 "오버플로 연산자"를 참조하십시오.

+0

좋습니다. 오버플로를 허용하도록 변경했지만 여전히 같은 오류가 발생합니다. 코드는 이제 43 번 반복되지만 오류를 다시 표시합니다. –

+0

@BraydenG : 수정 된 코드를 테스트했는데 문제없이 실행되었습니다. 루프는 2 * 20 + 3 = 43 번만 실행하므로 나중에 문제가 발생합니까? –

+0

나머지 코드를 주석 처리했으며 작동합니다. 나중에이 오류가 발생합니다. 도와 주셔서 감사합니다. –

-1

모든 UInt64를 사용하여 프로그램을 테스트했으며 잘 작동합니다. 희망이 도움이됩니다.)