【Unity】exeがクラッシュした:アクセス違反(0xC0000005)


UnityでWindows7用にexeを作成し、動作していたらクラッシュした。
exeと同じフォルダに日付のフォルダができその中にログが入っていたので解析してみた。(UnityというよりはWindowsの領域かもしれないが…)

ログファイル

  • build.exe ← 作成したexe
  • build-Data ← 作成時に作られる○○-Dataフォルダ
  • 2016-00-00_123456
    • crash.dump ← クラッシュしたときのメモリのdump?
    • error.log ← エラーログ

上の通りにcrash.dumpとerror.logが作成されていた。
crash.dumpは0byteで何も表記していなかった。(おそらくPC自体がクラッシュしたときにはメモリのdumpデータが入っている??)
error.logにはずらずらとログが書いてあった。

build.exe caused an Access Violation (0xc0000005)
  in module build.exe at 0023:015fc4b8.

Error occurred at 2016-11-03_164648.
C:¥Users¥hogehoge¥Desktop¥build¥build.exe, run by hogehoge.
87% memory in use.
0 MB physical memory [1025 MB free].
0 MB paging file [0 MB free].
0 MB user address space [270 MB free].
Write to location 00000000 caused an access violation.

Context:
EDI:    0x00000000  ESI: 0xf83c0040  EAX:   0x00000000
EBX:    0x03819840  ECX: 0x00000058  EDX:   0x00002aaa
EIP:    0x015fc4b8  EBP: 0x0033f268  SegCs: 0x00000023
EFlags: 0x00210207  ESP: 0x0033f25c  SegSs: 0x0000002b

Bytes at CS:EIP:
66 0f 7f 07 66 0f 7f 4f 10 66 0f 7f 57 20 66 0f 

Stack:
0x0033f25c: 00000000 03895c30 03f6c8e0 0033f288 ....0¥........3.
....以下省略

Module 1
C:¥Users¥hogehoge¥Desktop¥build¥build.exe
Image Base: 0x00f10000  Image Size: 0x011b3000
File Size:  17711616    File Time:  2016-11-03_113508
Version:
   Company:    
   Product:    
   FileDesc:   
   FileVer:    5.4.0.55511
   ProdVer:    5.4.0.55511

Module 2 ~ 125まで省略

== [end of error.log] ==

原因

気になるところをピックアップしてみた

  • build.exe caused an Access Violation (0xc0000005) in module build.exe at 0023:015fc4b8.
    • build.exeは0023:015fc4b8でモジュールbuild.exeでアクセス違反(0xC0000005)引き起こしました。
  • 87% memory in use. 0 MB physical memory [1026 MB free]. 0 MB paging file [0 MB free]. 0 MB user address space [377 MB free].
    • メモリ使用量:87%、物理メモリ:0/1026MB、ページングファイル:0/0MB、ユーザーアドレス容量:0/377MB
  • Write to location 00000000 caused an access violation.
    • 場所00000000への書き込みは、アクセス違反が発生していました。

上記よりメモリが足りないことにより解放され、アクセス違反?が発生し、そこを参照したためクラッシュしたと考えます。

アクセス違反(0xC0000005)

アクセス違反(0xC0000005)についてですが調べるとそう難しく考えることはなく
存在しないメモリにアクセスした、もしくはメモリ不足で解放された場所にアクセスした時に起こるメモリエラーのようです。

解決策

メモリの使い過ぎによりメモリエラーが起きていたことが原因のようです。
メモリの節約を行えば解決ということですね。

今回作ったbuild.exeはループするアプリでスタート画面からページ遷移を重ね処理が終わるとスタート画面に戻ってくるアプリでした。
解決のためにやったことはUnityでメモリ節約へ

メモリで開放されて…ではなく外部のexeを使用している場合
外部のexeがPCにインストールされていないのでエラーが起きているということもあるらしいです。
その場合はScriptの方で参照確認やエラーの確認をしましょう。

One thought on “【Unity】exeがクラッシュした:アクセス違反(0xC0000005)

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です