2011-11-29 74 views
3

我從來沒有見過這個,也許這是一個錯誤在jvm?爲什麼我的Java應用程序無情地發生致命錯誤?

我添加了一些代碼來解決數獨遊戲:

private boolean solve(int row, int col, Cell[][] cells) 
{ 
    if (row == NUM_PUZZLE_ROWS) 
    { 
     row = 0; 
     col++; 
     if (col == NUM_PUZZLE_COLUMNS) 
      return true; 
    } 
    if (cells[row][col].getValue() != 0) // skip filled cells 
     return solve(row + 1, col, cells); 

    for (int val = 1; val <= NUM_PUZZLE_ROWS; val++) 
    { 
     if (isPossible(row, col, val, cells)) 
     { 
      cells[row][col].setValue(val); 
      if (solve(row + 1, col, cells)) 
       return true; 
     } 
    } 

    cells[row][col].setValue(0); // reset on backtrack 
    return false; 

} 

private boolean isPossible(
     int row, int col, int val, Cell[][] cells) 
{ 

    //check the row 
    for (int r = 0; r < 9; r++) // row 
    { 
     //no duplicates permitted 
     if (val == cells[r][col].getValue()) 
      return false; 
    } 


    //check the column 
    for (int c = 0; c < 9; c++) // col 
    { 
     //no duplicates permitted 
     if (val == cells[row][c].getValue()) 
      return false; 
    } 

    int rowOffset = (row/3) * 3; 
    int colOffset = (col/3) * 3; 

    //check the 3x3 box 
    for (int r = 0; r < 3; ++r) 
    { 
     for (int c = 0; c < 3; ++c) 
     { 
      if (val == cells[rowOffset + r][colOffset + c].getValue()) 
      { 
       return false; 
      } 
     } 
    } 

    return true; // no violations, so it's possible 
} 

private boolean solve(Cell[][] cells) 
{ 
    resetPuzzle(); 
    return solve(0, 0, cells); 
} 

public boolean solve() 
{ 
    return solve(cells); 
} 

我觸發此代碼與解決按鈕。代碼很好。難題解決了,一切正常。直到我關閉應用程序。這並不是每次都發生,而是:只有當我解決了一個難題時纔會發生,而且這些時間只發生在一半的時間。

應用程序關閉不錯,但它返回1,而不是0成功退出該日誌文件:

已經由Java運行時環境檢測到致命錯誤:

EXCEPTION_ACCESS_VIOLATION(0000005)在PC = 0x6d93591e,PID = 2368,TID = 2040

JRE版本:6.0_27-B07 的Java VM:爪哇的HotSpot(TM)客戶機VM(20.2-B06混合模式下,共享的窗口86) 有問題的幀: V [JVM。DLL + 0x9591e]

如果您想提交錯誤報告,請訪問: http://java.sun.com/webapps/bugreport/crash.jsp

---------------螺紋------- --------

當前線程(0x02be1800):JavaThread 「AWT-Windows的」 守護程序 [_thread_in_vm,ID = 2040,堆疊(0x02fa0000,0x02ff0000)]

SIGINFO:ExceptionCode = 0000005,讀地址0x00000000

Regis TER值:EAX = 0x02be20c8,EBX = 00000000,ECX = 00000000, EDX = 0x02fef89c ESP = 0x02fef88c,EBP = 0x02fef920,ESI = 0x02be1800, EDI = 0x02bde6d0 EIP = 0x6d93591e,EFLAGS = 0x00010202

棧頂的:( SP = 0x02fef88c)0x02fef88c:02b002b8 02be1928 02be1800 000c3550 0x02fef89c:02be20c8 000c3528 00000000 02fef97c 0x02fef8ac: 7c91084c 000b01a0 7c910981 000b0608 0x02fef8bc:7c91015d 000c3550 000c3530 02fef89c 0x02fef8cc:02fef8bd 00000001 00000008 00000000 0x02fef8dc:7e428d8b 6d14cea1 02fef8f4 00000000 0x02fef8ec:
02fef91c 6d8a2af6 02be1800 02be2df8 0x02fef8fc:02be1800 02be1928 02fef8f8 02be1c88

說明:(PC = 0x6d93591e)0x6d9358fe:78個FF FF FF 89 41 14 8B 45 交流C6 04 10 01 8B 4D 0x6d93590e:B0 8B 55 A8 8B 45 F4 89 04 8A FF 45 B0 8B 5D FC 0x6d93591e :圖8b 03 8B 48 08 0F B7 51 2A 8B 40 0C 8B 4C 90 28 0x6d93592e:51 56 8D 4D BC E8 D8 A5 07 00 8B 55 18 33 C0 89

註冊到存儲器映射:

EAX = 0x02be20c8是未知值EBX = 0x00000000是未知值 ECX = 0x00000000是一個未知值EDX = 0x02fef89c指向 棧的線程:0x02be1800 ESP = 0x02fef88c是p ointing入堆棧 線程:0x02be1800 EBP = 0x02fef920指向到堆棧 螺紋:0x02be1800 ESI = 0x02be1800是一個線程EDI = 0x02bde6d0是 未知值

堆棧:[0x02fa0000,0x02ff0000],SP = 0x02fef88c,空閒空間= 318k 本機幀:(J =編譯的Java代碼,j =解釋,Vv = VM代碼, C =本機代碼)V [jvm.dll + 0x9591e] V [jvm.dll + 0x9884c] C [awt.dll + 0x6cbbc] Java_sun_awt_windows_WChoicePeer_create + 0x10c C [USER32.dll + 0x8734] GetDC + 0x6d C [USER32.dll + 0x8816] GetDC + 0x14f C [USER32.dll + 0x18ea0] DefWindowProcW + 0x180 C [USER32.dll + 0x18eec] DefWindowProcW + 0x1cc C [ntdll.dll + 0xe473] KiUserCallbackDispatcher + 0×13

的Java幀:(J =編譯的Java代碼,J =解釋,VV = VM代碼).J sun.awt.windows.WToolkit.eventLoop()V +爲0J sun.awt .windows.WToolkit.run()V + 52 j java.lang.Thread。運行()V + 11個V 〜StubRoutines :: call_stub

--------------- PROCESS ---------------

Java線程:(=>當前線程)0x02ba1400 JavaThread 「線程1」 守護程序[_thread_in_native,ID = 924,棧(0x03230000,0x03280000)]
0x002b6c00 JavaThread 「DestroyJavaVM」[_thread_blocked,ID = 3688, 堆(0x008c0000,0x00910000)] 0x03136c00 JavaThread 「AWT-EventQueue的-0」[_thread_blocked,ID = 376, 棧(0x03280000,0x032d0000)] => 0x02be1800 JavaThread 「AWT-Windows的」 守護程序[_thread_in_vm,ID = 2040,堆(0x02fa0000,0x02ff0 000)] 0x02be0800 JavaThread 「AWT關斷」 [_thread_blocked,ID = 1924,堆疊(0x02f50000,0x02fa0000)] 0x02bdec00 JavaThread 「的Java2D處置者」 守護程序[_thread_in_native,ID = 3992, 棧(0x02f00000,0x02f50000)] 0x02b57c00 JavaThread 「低內存 探測器」 守護程序[_thread_blocked,ID = 3804, 棧(0x02dd0000,0x02e20000)] 0x02b52000 JavaThread 「C1 CompilerThread0」 守護程序[_thread_blocked,ID = 612, 棧(0x02d80000,0x02dd0000)] 0x02b50400 JavaThread「附加 監聽程序「守護程序[_thread_blocked,id = 3844, 棧(0x02ce0000,0x02d30000)] 0x02b48400 JavaThr [_thread_blocked,id = 3916, stack(0x02d30000,0x02d80000)] 0x02b4f000 JavaThread」Signal JavaThr EAD 「終結」 守護程序[_thread_blocked,ID = 4092,堆疊(0x02c90000,0x02ce0000)]
0x02b46c00 JavaThread 「參考處理程序」 守護程序[_thread_blocked, ID = 2828,堆疊(0x02c40000,0x02c90000)]

其他線程:0x02b0ac00 VMThread [堆棧:0x02bf0000,0x02c40000] [ID = 3612] 0x02b63000 WatcherThread [堆棧:0x02e20000,0x02e70000] [ID = 1944]

VM狀態:不還原點(正常執行)

VM互斥/監視器目前擁有的線程:無

堆DEF新一代總4928K,使用823K [0x22990000, 0x22ee0000,0x27ee0000)伊甸空間4416K,使用7%[0x22990000,從空間512K 0x229ddc50,0x22de0000),100%使用的0x22e60000, 0x22ee0000,0x22ee0000 )到空間512K,使用0%[0x22de0000, 0x22de0000,0x22e60000)年老代總10944K,用於1261K [0x27ee0000,0x28990000,0x32990000)的空間10944K,11%用於 [0x27ee0000,0x2801b590,0x2801b600,0x28990000)壓制燙髮gen 共12288K,使用244K [0x32990000,0x33590000,0x36990000) 空間12288K,使用1%[0x32990000,0x329cd110,0x329cd200, 0x33590000) RO空間10240K,使用54%0x36990000,0x36f0f548,0x36f0f600,0x37390000) RW空間12288K,使用[55%[0x37390000,0x37a35140,0x37a35200,0x37f90000)

代碼緩存[0x00910000,0x009e0000,0x02910000)total_blobs = 410 NMETHODS = 214個適配器= 132 free_code_cache = 32713344 largest_free_block = 0

動態庫:0x00400000 - 0x00424000 C:\程序 文件\爪哇\ jdk1.6.0_27 \ BIN \的java.exe 0x7c900000 - 0x7c9b2000 C:\ WINDOWS \ system32 \ ntdll.dll 0x7c800000 - 0x7c8f6000 C:\ WINDOWS \ system32 \ kernel32。dll 0x77dd0000 - 0x77e6b000 C:\ WINDOWS \ system32 \ ADVAPI32.dll 0x77e70000 - 0x77f03000 C:\ WINDOWS \ system32 \ RPCRT4.dll 0x77fe0000 - 0x77ff1000 C:\ WINDOWS \ system32 \ Secur32.dll 0x7c340000 - 0x7c396000 C:\ Program 文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \ MSVCR71.DLL 0x6d8a0000 - 0x6db4f000 C:\ Program Files文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \客戶\ jvm.dll的0x7e410000 - 0x7e4a1000 C:\ WINDOWS \ system32 \ USER32.dll 0x77f10000 - 0x77f59000 C:\ WINDOWS \ system32 \ GDI32.dll 0x76b40000 - 0x76b6d000 C:\ WINDOWS \ system32 \ WINMM.dll 0x76390000 - 0x763ad000 C:\ WINDOWS \ system32 \ IMM32.DLL 0x6d850000 - 0x6d85c000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ verify.dll 0x6d3d0000 - 0x6d3ef000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ java.dll 0x6d890000 - 0x6d89f000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ zip.dll 0x6d0b0000 - 0x6d1fc000 C :\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ awt.dll 0x73000000 - 0x73026000 C:\ WINDOWS \ system32 \ WINSPOOL.DRV 0x77c10000 - 0x77c68000 C:\ WINDOWS \ system32 \ msvcrt.dll 0x774e0000 - 0x7761e000 C:\窗口\ system32 \ OLE32.DLL 0x773d0000 - 0x774d3000 C:\ Windows \ WinSxS文件\ x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 \ COMCTL32.DLL 0x77f60000 - 0x77fd6000 C:\窗口\ system32 \ SHLWAPI.dll 0x5ad70000 - 0x5ada8000 C:\ WINDOWS \ system32 \ uxtheme.dll 0x6d2e0000 - 0x6d32f000 C:\ Program Files \ Java \ jdk1 C:\ WINDOWS \ system32 \ shell32 C:\ WINDOWS \ system32 \ msctfime.ime 0x7c9c0000 - 0x7d1d7000 0x765c000 .dll 0x6d6b0000 - 0x6d6c3000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ net.dll 0x71ab0000 - 0x71ac7000 C:\ WINDOWS \ system32 \ WS2_32.dll 0x71aa0000 - 0x71aa8000 C:\ WINDOWS \ system32 \ WS2HELP.dll 0x6d6d0000 - 0x6d6d9000 C:\ PROGRAM 文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \ nio.dll 0x76bf0000 - 0x76bfb000 C:\ WINDOWS \ SYSTEM32 \ PSAPI.DLL

VM參數:jvm_args :-Dfile.encoding = UTF-8 -Djava.security.policy = applet.policy java_command:SudokuA PP發射類型:SUN_STANDARD

環境變量:CLASSPATH = .; C:\程序 文件\爪哇\ JRE6 \ lib中\分機\ QTJava.zip PATH = C:\窗口\ system32; C:\ WINDOWS; C^:\ WINDOWS \ System32 \ Wbem; C:\ windows \ system32 \ WindowsPowerShell \ v1.0; C:\ windows \ system32 \ WindowsPowerShell \ v1.0; C:\ Program Files \ Common Files \ Roxio Shared \ DLLShared \ C:\ Program Files \ Common Shared \ OEM \ DLLShared \; C:\ Program Files \ Common Files \ Roxio Files \ Roxio Shared \ OEM \ DLLShared \; C:\ Program Files \ Common Files \ Roxio \ 12.0 \ DLLShared \; C:\ Program Files \ Roxio \ OEM \ AudioCore \; C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL 服務器\ 100 \ DTS \ BINN \; C:\ Program Files文件\的QuickTime \ QTSystem \ USERNAME = 0935231 OS = Windows_NT PROCESSOR_IDENTIFIER = x86家族6模型 42步進7,GenuineIntel

------- --------系統---------------

操作系統:Windows XP版本2600 Service Pack 3的

CPU:共8個(4個%CPU內核,每個核心2個線程)家族6模型42 步進7,cmov,cx8,fxsr,mmx,sse,sse2,sse3,ssse3,sse4.1, sse4。2,POPCNT,HT

內存:4K頁,物理3318716k(2487016k免費),交換 7866808k(7197684k免費)

vm_info:爪哇的HotSpot(TM)客戶機VM(20.2-B06)的Windows-86 JRE (1.6.0_27-B07)中,由 「java_re」 與MS VC++ 7.1(VS2003)

時間建立在2011年7月19日1點04分42秒:星期一11月28十二點30分52秒2011經過時間: 10秒

什麼可能是錯的? 代碼不會拋出任何異常,並且沒有任何出錯的跡象。

感謝

+0

CLASSPATH = .; C:\ Program Files \ Java \ jre6 \ lib \ ext \ QTJava.zip似乎有點可笑嗎? QTJava.zip是做什麼的,它絕對有必要保存在lib/ext文件夾中? –

回答

4

你已經找到了在Java中的漏洞,除非你有你不告訴我們一些本地代碼。

+0

我沒有任何本機代碼。 – jmasterx

+0

你應該把它作爲一個bug提交。確保包含完整的程序以及任何輸入。 – Bill

相關問題