次のクラスを宣言しました。
class StaticMesh
{
public:
unsigned int v_count;
float* vertices;
unsigned int n_count;
float* normals;
void Load_lin(const char* file);
void Draw(void);
void Release(void);
};
このクラス(名前が示すように)は、.linファイルをロードできる静的メッシュを表します。
.linファイルは、C#を使用して作成した別のアプリケーションによって生成されます。このアプリケーションは、.objファイルを読み取り、次の構造を持つ.linファイルを生成します。
v_count v
n_count n
a#a#a
b#b#b
a#a#a
b#b#b
ここで、vは頂点の数、nは法線の数、a/bは座標を表します。
Load_lin(const char *)は、これらのファイルをロードする関数であり、次のとおりです。
void StaticMesh::Load_lin(const char* file)
{
std::ifstream in (file);
if (!in)
{
std::cout << "Error: Failed to load staticmesh from '" << file << "'." << std::endl;
return;
}
char buffer[256];
in.getline(buffer, 256);
sscanf_s(buffer, "v_count %i", &v_count);
in.getline(buffer, 256);
sscanf_s(buffer, "n_count %i", &n_count);
vertices = new float[v_count];
normals = new float[n_count];
unsigned int a = 0;
unsigned int p = 0;
float x, y, z;
do
{
in.getline(buffer, 256);
if (buffer[0] == '\n' || buffer[0] == '\r') break;
sscanf_s(buffer, "%f#%f#%f", &x, &y, &z);
vertices[a++] = x;
vertices[a++] = z;
vertices[a++] = y;
in.getline(buffer, 256);
sscanf_s(buffer, "%f#%f#%f", &x, &y, &z);
normals[p++] = x;
normals[p++] = z;
normals[p++] = y;
} while (!in.eof());
in.close();
}
エラーの原因をこの関数に絞り込みましたが、エラーはアプリケーションを閉じたときにのみ表示され、発生しない場合もあります。
したがって、エラーが発生する行は、実際にはWinMainの終わりです。
return msn.message;
さらに進んで、std :: coutを使用して変数「a」と「p」を出力しました。これによりヒープ破損エラーが発生しますが、今回はmalloc.cの55行目です。
__forceinline void * __cdecl _heap_alloc (size_t size)
{
if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}
return HeapAlloc(_crtheap, 0, size ? size : 1);
} // LINE 55
私はこの最後のエラーを無駄に検索しました。
お時間をいただきありがとうございます。:)