テキストファイルをコピーするプログラムを作成しています。filenamein配列で指定されたテキストファイルを読み取り、filenameout配列で指定されたテキストファイルのコピーを出力するmain.cppファイルがあります。この関数をFileUtilities.hで次のように宣言しています。
bool textFileCopy(char filenamein[], char filenameout[]);
次に、FileUtilities.cppには
#include <iostream>
#include <fstream>
#include <string>
#include "FileUtilities.h"
bool FileUtilities::textFileCopy(char filenamein[], char filenameout[])
{
ifstream fin(filenamein);
if(fin.is_open())
{
ofstream fout(filenameout);
char c;
while(fin.good())
{
fin.get(c);
fout << c;
}
fout.close();
fin.close();
return true;
}
return false;
}
これをコンパイルすると、VisualCアサーションエラーが発生します。「MicrosoftVisualC++デバッグライブラリ」というタイトルのダイアログボックスが表示されます。このダイアログボックスには次のものが含まれています。
「デバッグアサーションに失敗しました!
プログラム:..... Parser.exe
ファイルf:\ dd \ vctools \ crt_bld \ Self_x86 \ crt \ src \ fopen.c
53行目
式:(ファイル!= NULL) "
このエラーにより、中止、再試行、無視の3つのオプションが表示されます。中止すると、デバッグが停止します。再試行すると、「program.exeがブレークポイントをトリガーしました」というメッセージがVisualStudioに表示されます。ここで[ブレーク]をクリックすると、Visual Studioは「fopen.c」というファイルを開き、このファイルの54行目を指します。
この時点から続行すると、VisualStudioは62行目へのポインターを含む「dbghook.c」という別のファイルを開きます。