人に聞けない痔の悩み、これでスッキリ >>

大変困っています。

アプリケーションが終了するときに「アクセス違反」がワトソン博士によって取得されています。
当方アプリケーションなどに弱く、解決策の想像が付きません。どなたかご教授お願いいたします。

<解決策例>
・どういったスキルを持った人にどの様な調査を進めさせれば良いのか。。。
・以前同様な事があり原因は○○だった
・恐らく○○だろう
 など、お願いいたします。

<ユーザ報告>
処理終了し、画面が消えたところでワトソン博士のメッセージが表示された

<ログ抜粋>
例外番号c0000005(アクセス違反)

ファンクション:RtlDestroyHeap
~略~
フォールト → 77f6d672 8908 mov [eax],ecx ds:09000001=00000000

<備考>
開発環境:MSVC6.0
動作環境:Windows NT4.0 SP6a
発生頻度:2回/年
使用頻度:2~3回/(平日)

以上、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

発生頻度が年2回というのはなかなか厳しい条件ですね。



さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB自体は特定のアプリケーションについて書かれていますが、記述されている現象と原因の関係から考えるに、他のアプリケーションでも同様の現象が発生すると思われます。

さてさて。

せっかく書いた文章を捨てるのがもったいないので(貧乏性)、邪魔かもしれませんが下に続けることにします。もし上のKBの内容がそれらしいようであれば、読み飛ばしてください。

========

私であれば、次の手順で調査を行います。

1. MAPファイル、CODファイル作成

「ワトソン博士のログを取得した際に実行していたEXEファイル」をビルドした際、一緒にMAPファイルやCODファイル(リスティングファイル)を作成していれば、そのファイルを用意しておきます。

もし作成していない場合は、「ワトソン博士のログを取得したEXEファイル」と、バイナリレベルで全く同じEXEファイル(バイト単位で比較すると、ファイルに埋め込まれたタイムスタンプ・チェックサム以外は一致する)が作成可能かどうか調べます。(ビルドに必要なソースファイルやビルドオプションに変更を加えていなければ作成可能です。)

作成可能であれば、コンパイルオプションに「リスティングファイルタイプ:マシン語コードとソースを含む」、リンクオプションに「MAPファイル作成」を追加してEXEを再作成してください。これで、「ワトソン博士のログを取得した際に実行していたEXEファイル」に対応するMAPファイルとCODファイルが得られます。

2. エラー発生行を特定

ワトソン博士のログがどれだけ取れているかにもよりますが、スタックダンプが含まれていればたいていエラー発生行を特定できます。

まず「フォールト->」が含まれる逆アセンブルリストを探します。次に、その下にある「スタックバックトレース」を探します。

スタックバックトレースを上から下に順にたどっていくと、そのうち「ReturnAd」(リターンアドレス)がアプリケーションのアドレス範囲(VC++6の標準オプション設定を変更していなければ0x00400000~)に入るところが出てきます。見つかったら、そのアドレスの直前にあるcall命令が例外を発生させたAPIを直接呼び出している場所です。

さて、仮にリターンアドレスが0x00401234だったとします。そうしたら、次はMAPファイルを見てこのアドレスがどの関数に属しているか探します。ちょうど0x00401234というアドレスは見つからないでしょうけれども、これに近いアドレスは見つかるはずです。そのアドレスに対応する関数名もMAPファイルにあります。

次はその関数名をCODファイルから探します。見つかったら、MAPファイルにあるアドレスがCODファイルにあるマシン語コードの先頭アドレスになるので、そこからリターンアドレス0x00401234に対応するはずの場所まで順番にアドレスを辿っていきます。関数の先頭アドレスが0x00401200であれば、0x34バイト先を探すわけです。

そうすると、その探した場所にある命令の直前の命令がcall命令になっているはずです。CODファイルには、その場所のC++ソースでの行番号とソース文もコメントとして入っているはずなので、あとは対応するソースをよーく見てエラーの見当をつけてください。

アセンブラの知識があれば、そこでcallを使った(他の関数を呼び出した)ときの引数の内容もある程度分かります。(ポインタ渡しだと、そのポインタの先の内容までは分かりませんが。)

3. 置き換え用EXEファイルと対応するMAPファイル作成

これ以降は将来への備えです。

コンパイルオプションでデバッグ情報を「プログラムデータベースを使用」、リスティングファイルタイプを「マシン語コードとソースを含む」、リンクオプションで「MAPファイルを作成する」、デバッグ情報「他の種類」を追加してビルドし、出来たEXEファイルを本番用として使用します。同時に作成されるMAPファイル、CODファイル、PDBファイルは保管しておきます。

MAPファイル、CODファイルの使い方は上記2.のとおりです。PDBファイルは、もし完全なクラッシュダンプが取得できればWinDbgを使って事後ソースレベルデバッグが可能になりデバッグ作業が非常に楽になるので、念のため取っておきます。

4. ワトソン博士のオプション変更

drwtsn32.exeを起動し、「クラッシュダンプファイルの作成」をチェックします。(デフォルトは、チェックが入っています。)

クラッシュダンプファイルとEXEとPDBがあればWinDbgで事後ソースレベルデバッグができます。(いわゆるポストモーテムデバッグです。UNIX系でコアダンプしたコアをデバッガで読み込んでデバッグするのと同じ種類のものです。)


普段何とも思わずに行っていることでも、文章にすると長いですね・・・

えーと、「どういうスキルを持った人に調査させればいいか」については、上記の内容を読んで『なるほど!』と言える人でしょうか。

参考URL:http://support.microsoft.com/kb/168006/ja
    • good
    • 6

問題点の調査方法ではないですし抜本的な解決策でもないですけど、アクセス違反が発生するのが処理中ではなく終了時(終了処理によるもの)なら、終了時のメモリ解放処理を省いてしまうという解決策もあります。


実のところC/C++でもメモリ解放処理は結構複雑で、データ構造によってはエラーを起こさずに解放するのが難しいこともあります。どうせプロセスが終了すれば全解放されるのでプログラム上での解放処理を省いてしまうのが簡単な場合も多いです。
    • good
    • 0

No.4に対する「回答者へのお礼」のコードを見ると、


何処かで

char *p = new char[256];
p += 10;
...
delete [] p; // 加算したポインタで開放

などとしているということはないでしょうね?
これだとポインタの演算が入るような場合にのみアクセス違反が発生しますよ。
    • good
    • 0

あと、この場合、一番可能性の高いのがどこかの処理でメモリを破壊している、という可能性です。



たまたま壊した箇所にアクセスに行かない限り落ちないので落ちたり落ちなかったり、壊した箇所がデータであればフラグを書き換えたりして誤動作の原因になったりと始末に終えません。

ほかにもいろいろあるとおもいますがとりあえず思いつく原因はこんなところです。

ー あらかじめ確保したバッファのサイズを越えて書き込みを行っている箇所はないか

ー 基本クラスのインスタンスに追加のメンバ変数をもつ派生クラスのポインタでアクセスしたりしていないか

ー 未初期化ポインタで処理されている箇所はないか


あたりまえの回答でもうしわけありませんが、
VCがわかる人に、メモリを壊している箇所がないか調査してもらう、ということになるのでは?
    • good
    • 1
この回答へのお礼

早速ありがとうございます。
当たり前の回答とおっしゃりますが、非常に助かります。こちらはその当たり前も。。。

実は、あまりわからないなりにも解析していたところ、作成していた方のレベルが。。。だった為か、以下のような記述を発見しました。。

FuncA(CString strSrc){
char szA[50];
memcpy(szA, strSrc, strSrc.GetLength());
}
(もちろん呼び側でもlength未精査)。。

また、少しわからないのが、原因不明だったためか、
InitInstanceでダイアログをmodalする時(DialogBase)にtry文で例外を取得しているのですが、効果がはなかったみたいです。(以下参照)
解釈としては、「上記のような箇所がある為InitInstanceのメモリ開放時に落ちている」でよろしいですかね?

InitInstance() {
CADialog ADlg;
try {
nRet = ADlg.DoModal();
}
catch(...){
}
}

すみません。。たびたび。

お礼日時:2005/07/15 02:36

あるいは未初期化ポインタを解放しようとしているとか。



クラス内のデストラクタでfreeまたはdeleteしているところがあるとしたら、そのポインタ変数がちゃんと明示的に初期化されているか確認してください。
    • good
    • 1
この回答へのお礼

ありがとうございます。
上記回答に追加質問させていただきました。
>ルール違反?

すみませんが、よろしくお願いいたします。

お礼日時:2005/07/15 02:38

あるいは、二重の解放とか

    • good
    • 0
この回答へのお礼

早急な回答ありがとうございます。

みなさんの間では常識なのですね~。
実は、怪しい箇所をみつけ、そこにメモリ内容を越えるデータを入れたのですが、同一現象が再現しなかったのです。。

何か参考になるurlなどありましたら教えてください。

お礼日時:2005/07/15 02:40

メモリの解放し忘れじゃないですかね

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QC言語でのaccess violationについて

Microsoft Visual C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。
そこでデバッグを行ったら、

ハンドルされていない例外は”アプリ名.exe”にあります
:0xC0000005:Access Violation。

というメッセージが出てきました。
ネットでAccess Violationについて調べたのですが、いまひとつ理解できません。
これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか?
初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。お願いします。

Aベストアンサー

アクセス違反。システム自身の保護機能発動。
おそらくアクセスできないメモリにアクセスしてる。

どんなプログラムか不明ですが、
・char[]等: バッファの最後よりも後ろへ出力しようとしてる
・printf系: 書式指定箇所を埋めるのにパラメータが足りない
などが良く引っかかる点。

プログラムを晒せば、もっと的確なレスポンスが付くかもしれません

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

Q読み込み中にアクセス違反が発生しました、と出ます。これを回避することは

読み込み中にアクセス違反が発生しました、と出ます。これを回避することはできますか?

C++でプログラミングをしています。
現在、ポインタ(p)に入れたアドレスをずらしていって、メモリの任意の位置の値を表示する、というプログラムを制作しています。

具体的に言うと、上記のプログラムではない別のプログラムを実行し、そのプログラムで宣言した変数のアドレスを表示させます。そしてそのプログラムが動いている最中に、上記のプログラムを起動させ、ポインタpにその変数のアドレスを代入して、表示させようとしました。

しかし、止まってしまいます。デバッグしてみると、「test.exe の 0x00024ad5 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x0014fde8 を読み込み中にアクセス違反が発生しました」と出ます。

なんとかこれを回避して、ポインタに代入したアドレスを表示さすことはできませんか?
宜しくお願いします。

ちなみに、自分がかなり妙なことをしているのは自覚しているつもりです。

Aベストアンサー

#2です。
もう少し突っ込んで話をすると、今のOSはたいてい仮想アドレス方式で各プロセスのアドレス空間はそのプロセス内でのみ有効なものです。
つまり、プロセスAの0番地とプロセスBの0番地は値は同じでも全く別の箇所を指しているということです。

ですが、プログラムの中には複数プロセスで協調動作させる等の理由により質問のような他プロセスが扱うメモリの中身を参照・変更したい場合があります。
それを実現するのが共有メモリ等の機構である訳です。

QNtdll.dllエラー

Intel SSD Toolboxというソフトを起動しようとしたら
「アプリケーションを正しく起動できませんでした(0xc0000005)」
というエラーが出て起動できません。
イベントビューアを見ると以下のようなエラーログが出ていました。

障害が発生しているアプリケーション名: Intel SSD Toolbox.exe、バージョン: 2.0.1.0、タイム スタンプ: 0x4cbcdde3
障害が発生しているモジュール名: ntdll.dll、バージョン: 6.1.7600.16559、タイム スタンプ: 0x4ba9b21e
例外コード: 0xc0000005
障害オフセット: 0x000619f1
障害が発生しているプロセス ID: 0xa1c
障害が発生しているアプリケーションの開始時刻: 0x01cbae911a3dbc3a
障害が発生しているアプリケーション パス: C:\Program Files\Intel\Intel? Solid-State Drive Toolbox\Intel SSD Toolbox.exe
障害が発生しているモジュール パス: C:\Windows\SYSTEM32\ntdll.dll
レポート ID: 582aa792-1a84-11e0-b30f-001bdc0fcde3

Ntdll.dllにエラーが出ているとのことで、調べるとOfficeIMEを無効にする、Aeroを切る、BIOSのHPETを切るなど出てきたのですが、
どれも効果ありませんでした。
セーフモードで正常なNtdll.dllに置き換えようと思ったのですが、web上にはNtdll.dll ver5台しか落ちていません。
何か解決方法ないでしょうか?

OS:Win7 Pro 32bit
Intel SSD Toolbox:ver2.0.1.000

Intel SSD Toolboxというソフトを起動しようとしたら
「アプリケーションを正しく起動できませんでした(0xc0000005)」
というエラーが出て起動できません。
イベントビューアを見ると以下のようなエラーログが出ていました。

障害が発生しているアプリケーション名: Intel SSD Toolbox.exe、バージョン: 2.0.1.0、タイム スタンプ: 0x4cbcdde3
障害が発生しているモジュール名: ntdll.dll、バージョン: 6.1.7600.16559、タイム スタンプ: 0x4ba9b21e
例外コード: 0xc0000005
障害オフセット: 0x000619f1
障害が発...続きを読む

Aベストアンサー

PC環境がわからないのですが、内蔵HDDの代わりにSSDを使っているのですか?
(Windows 7の場合はSSDを最適化するTrimコマンドの自動実行機能がついているため不要では?)


Windowsファイアーウォールは有効ですか?(有効にできますか?)

QCString から LPCTSTRの型に変換

visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。
例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです

CString str = _T("ABC");
int siz = str.GetLength()+1;
LPCTSTR pszFName = new TCHAR[siz];
_tcscpy_s( pszFName, siz, str );

で変換するのですが
LPCTSTRからwchar_t*へ変換できませんとエラーがでます
_tcscpy_s()は使用できないのでしょうか

Aベストアンサー

>APIはCStdioFile の Open()でファイル名を与えるところ

APIではないようですが……。

http://msdn.microsoft.com/ja-jp/library/ee247566.aspx
ならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。

Q動作を停止しましたと表示され、停止します。

動作を停止しましたと表示され、アプリケーション停止します。

問題の詳細



発生元
怪盗攻略ブラウザ2

概要
動作が停止しました

日付
‎2013/‎08/‎07 0:19

状態
レポートが送信されました

説明
障害が発生しているアプリケーションのパス: C:\Users\******\AppData\Local\Apps\2.0\8B9RETX1.HAB\QDOQORNC.VKJ\kait..tion_8149fee0edf1ff73_0002.0001_5674af9cba542bd5\KaitoBrowser2_1.exe

問題の署名
問題イベント名: APPCRASH
アプリケーション名: KaitoBrowser2_1.exe
アプリケーションのバージョン: 1.0.0.0
アプリケーションのタイムスタンプ: 51ef9c9c
障害モジュールの名前: KERNELBASE.dll
障害モジュールのバージョン: 6.1.7601.18015
障害モジュールのタイムスタンプ: 50b83c8a
例外コード: 4000001f
例外オフセット: 00013219
OS バージョン: 6.1.7601.2.1.0.768.3
ロケール ID: 1041
追加情報 1: 12e5
追加情報 2: 12e5e8e1c146c520e06bac21034ebc4f
追加情報 3: 3670
追加情報 4: 367002d938052abab76c4a26ecb98de3

この問題に関するその他の情報
バケット ID: 3728007683

動作を停止しましたと表示され、アプリケーション停止します。

問題の詳細



発生元
怪盗攻略ブラウザ2

概要
動作が停止しました

日付
‎2013/‎08/‎07 0:19

状態
レポートが送信されました

説明
障害が発生しているアプリケーションのパス: C:\Users\******\AppData\Local\Apps\2.0\8B9RETX1.HAB\QDOQORNC.VKJ\kait..tion_8149fee0edf1ff73_0002.0001_5674af9cba542bd5\KaitoBrowser2_1.exe

問題の署名
問題イベント名: APPCRASH
アプリケーション名: KaitoBrowser2_1.exe
ア...続きを読む

Aベストアンサー

追加
>KERNELBASE.dll

VB***、.NET Framework*関連の場合もあります。
VB PowerPacksSetup.exeを実行インストールして解決した事例
参考URL

参考URL:http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=30385&no=0&KLOG=3

Qエクセルの動作が停止する事があります

エクセル2013をwindows7で使っています。

入力している時に何かの拍子でいきなり「エクセルは動作を停止しました」という
表示が現れ、エクセルが強制的に落ちるような状態になる事があります。

結構入力したあとですと、こまめに保存していないとデーターが消えてしまい困っています。

落ちたあとに再びエクセルを立ち上げると、前の入力していたファイルを選び立ち上げる事もたまにできますが、毎回ではありません。

エラーが出たときの詳細表示をそのまま下に書きますと、

問題イベント名:APPCRASH
アプリケーション名:EXCEL.EXE
アプリケーションのバージョン:15.0.4454.1503
アプリケーションのタイムスタンプ:50b592fe
障害モジュールの名前:ntdll.dll
障害モジュールのバージョン:6.1.7601.18205
障害モジュールのタイムスタンプ:51db96c5
例外コード:c0000005
例外オフセット:00052d94
OSバージョン:6.1.7601.2.1.0.256.48
ロケールID:1041
LCID:1041
skulcid:1041

となっています。

何が原因でどうすれば改善されるのでしょうか?
どうかお教えください。
宜しくお願いいたします。

エクセル2013をwindows7で使っています。

入力している時に何かの拍子でいきなり「エクセルは動作を停止しました」という
表示が現れ、エクセルが強制的に落ちるような状態になる事があります。

結構入力したあとですと、こまめに保存していないとデーターが消えてしまい困っています。

落ちたあとに再びエクセルを立ち上げると、前の入力していたファイルを選び立ち上げる事もたまにできますが、毎回ではありません。

エラーが出たときの詳細表示をそのまま下に書きますと、

問題イベント名:APPCRASH
アプ...続きを読む

Aベストアンサー

こちらのQ&Aが参考になりますでしょうか?

http://oshiete.goo.ne.jp/qa/249046.html

http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E5%90%AB/2e755c83-b938-400c-af7c-af033538a915

あと、何かの常駐プログラムが悪さをする場合もあるようです。
常駐プログラムのうち、使いそうにないものをアンインストール
するといいかもしれません。

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング