質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

2回答

7863閲覧

【C++】Abnormal program terminationが出る

aoitofu

総合スコア12

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2016/05/03 09:04

###前提・実現したいこと
DxLibで縦スクロールSTGを作っていて、現在タイトル画面を制作しています。
コンパイラはbcc32でBCCDeveloper+GVIMを使っています。

###発生している問題・エラーメッセージ
プログラムを実行するとWinMainの最初の行も実行されずに
Abnormal program Termination
が表示されて中断される。

###該当のソースコード

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5#include <calculate.h> 6#include <font.h> 7 8#include <Game/game.h> 9 10#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16 int background = 0; 17 18 {// System Initialize 19 ChangeWindowMode( true ); 20 SetWindowText( "1500eyes" ); 21 SetGraphMode( WIN_W, WIN_H, WIN_BIT ); 22 23 if( DxLib_Init() == -1 ) 24 return -1; 25 26 SetDrawScreen( DX_SCREEN_BACK ); 27 } 28 29 {// Load Resources 30 background = LoadGraph( "./data/cg_stage.png" ); 31 32 loadTitle(); 33 loadFont(); 34 } 35 36 printfDx( commaSeparate( -100000 ).c_str() ); 37 38 // Main Loop 39 while( ProcessMessage() == 0 ){ 40 41 ClearDrawScreen(); 42 DrawGraph( 0, 0, background, true ); 43 44 switch( getGameStatus() ){ 45 case Title: 46 updateTitle(); 47 break; 48 } 49 50 ScreenFlip(); 51 52 } 53 54 {// Exit Process 55 DxLib_End(); 56 } 57 58 return 0; 59}

###試したこと
・WinMainの最初の行にreturn 0;を付けた。→Abnormal Program Terminationが表示される。
・WinMainの最初の行にMessageBoxを付けた。→Abnormal Program Terminationが表示される。

###補足情報(言語/FW/ツール等のバージョンなど)
Windows7 64bit
Memory 8GB
bcc32 Compiler 5.5.1
BCCDeveloper1.2.21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2016/05/03 10:58 編集

自作ヘッダを利用しているとのことですが、他のソースファイルがあれば見せてもらえると嬉しいです(他ファイルのグローバル変数が原因である可能性もある)。
guest

回答2

0

こんにちは。

なにか複雑な問題が絡んでいるかも知れません。
このような時は、一歩一歩条件を絞って原因を絞り込んでいくのが確実です。

まずは、#include <windows.h>と空のWinMain()関数だけのプログラムを作って、BCC32でビルドしてみて下さい。それでAbnormal program Terminationがでたら、BCC 5.52のインストールを失敗しているか、使い方を間違っています。BCC32のGetting startを再度読みなおしてリトライするべきです。

でない時は、DxLibのBCC 5.5用サンプルをビルドしてみて下さい。それでAbnormal program Terminationがでたら、DxLibのインストールを失敗しているか、使い方を間違っています。BorlandC++ Compiler 5.5によるDXライブラリの使い方を再度読みなおしてリトライするべきです。

でない時は、上記ソースに独自ヘッダを1つずつ追加していって下さい。どこかでAbnormal program Terminationが出るはずです。その場合は、そのヘッダ開発者に問題点を説明しアドバイスして貰うしかないように思います。

それでもでない時は、空のWinMain()関数に、提示されたWinMain()関数の中身を少しづつ戻します。どこかでAbnormal program Terminationが出るはずです。出た時に追加した文(たぶん、何かの関数呼び出し)が何か不具合を引き起こしている筈です。その関数の開発者に問題点を説明しアドバイスして貰うしかないように思います。

ちなみに、最後のケースは普通に考えるとあり得ませんが、特殊なテクニックを使っていると発生する可能性があります。
例えば、boostで使われているのですが、WinMain()関数より後で特定の何かを行うことで、それに関連したクラスのコンストラクタをWinMain()関数より前に実行するテクニックがあります。
そのコンストラクタにAbnormal program Terminationするような不具合があれば、発生する可能性はあります。

投稿2016/05/03 14:41

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下の順で試してみてはどうでしょう?

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4//#include <config.h> 5//#include <calculate.h> 6//#include <font.h> 7 8//#include <Game/game.h> 9 10//#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5//#include <calculate.h> 6//#include <font.h> 7 8//#include <Game/game.h> 9 10//#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5#include <calculate.h> 6//#include <font.h> 7 8//#include <Game/game.h> 9 10//#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5#include <calculate.h> 6#include <font.h> 7 8//#include <Game/game.h> 9 10//#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5#include <calculate.h> 6#include <font.h> 7 8#include <Game/game.h> 9 10//#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

C++

1#include <DxLib.h> 2 3//ここから独自のヘッダファイル 4#include <config.h> 5#include <calculate.h> 6#include <font.h> 7 8#include <Game/game.h> 9 10#include <Scene/title.h> 11 12int WINAPI WinMain( HINSTANCE hInstance, 13 HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 14{ 15 return 0; 16}

どこから、エラーが出るようになりましたでしょうか?
そのエラーが出始めたヘッダファイルの中に問題があると思います。
グローバル変数定義関連の問題かと。

投稿2016/05/04 04:19

ItoTomonori

総合スコア1283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問