🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++Builder

C++Builderは、C/C++を用いてアプリ開発できる統合開発環境 (IDE) 。DelphiのC++版です。コンポーネントによるビジュアル開発、高機能なコードエディターなどで生産性の高い開発ができます。

C++

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

Q&A

1回答

1821閲覧

デバッグで Abnormal program termination が必ず出る。

MaeharaKenji

総合スコア86

C++Builder

C++Builderは、C/C++を用いてアプリ開発できる統合開発環境 (IDE) 。DelphiのC++版です。コンポーネントによるビジュアル開発、高機能なコードエディターなどで生産性の高い開発ができます。

C++

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

0グッド

0クリップ

投稿2019/11/23 10:33

編集2019/11/23 21:27

現在、embarcadero RAD Studio 10.3でプログラミングを行っています。

exeファイルと同じディレクトリ内のSaveFile.txtを読み込むプログラムをデバッグする時に、ステップ実行していくと必ず”Abnormal program termination”が発生して、RAD Studioごと強制終了してしまうのですが、回避方法などはありませんでしょうか?

下のプログラムで、最初の行からステップ実行していくと、”string line;”の宣言のところで出てきます。

また、”string line;”を一番最初のステップに変えても起こります。
なにかstring型の宣言と関係はありますでしょうか?

こちらのgithubサイトにコードがありますが、RAD Studioをお持ちの方で、他の方のPCでも同様の現象は発生していますでしょうか?

多少、他の開発環境(Atmel Studioのマイコン開発)でも、組み込みOSを扱ったプログラムでも、デバッグ機能で数値確認などが上手くできない現象などを経験したことが多少あるのですが、PCアプリ開発ではこのような現象はいつも起こるような現象でしょうか?
デバッグなどで便利な機能や方法などアドバイスもお願いします。

c++

1using namespace std; 2 3void __fastcall TTCP_Client::FormCreate(TObject *Sender) 4{ 5 6 AnsiString filename = "SaveFile.txt"; 7 8 ifstream fin; 9 fin.open(filename.c_str(), ios::in); 10 11 if( !(fin.fail()) ) 12 { 13 string line; 14 string line02; 15 16 while(getline(fin,line)) 17 { 18 //cout << "[" << line << "]" << endl; 19 //line02 << "[" << line << "]" << endl; 20 line = "[" + line; 21 line = line + "]\r\n"; 22 line02 = line02 + line; 23 } 24 25 AnsiString str(line02.c_str()); 26 ShowMessage(str); 27 } 28 else 29 { 30 StatusBar1->Panels->Items[0]->Text = "Save file does not exist!"; 31 } 32 33}

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

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

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

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

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

jimbe

2019/11/23 12:11

C++ でしたらご質問のタグも C++ にして頂けますか.
MaeharaKenji

2019/11/23 21:28

わかりました。ありがとうございます。
guest

回答1

0

回答初めてなので,言葉足らずだったら,申し訳ありません。
また,回答になっているかわかりませんが,自分の開発環境(Embarcadero10.3.3)で試してみた結果を報告します。
「結果」
上記ソースコードのままでは,エラーが表示されたため,エラーを除去して実行した結果,「Abnormal Program termination」は表示されませんでした。

「調査結果」
「Abnormal Program termination」のキーワードで調べてみましたが,「abort()」関数が呼ばれているみたいです。どのように解決するかも調べましたが,そこまでは見つけられませんでした。力及ばず,すいません。会社の開発環境がEmbarcadero10.3と同じなので,年明けにでもまた試してみます。

下記に修正したソースコードを記載しておきます。
Project1.cpp

C++

1//--------------------------------------------------------------------------- 2#include <vcl.h> 3#pragma hdrstop 4#include <tchar.h> 5//--------------------------------------------------------------------------- 6USEFORM("Unit1.cpp", TCPClient); 7//--------------------------------------------------------------------------- 8int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 9{ 10 try 11 { 12 Application->Initialize(); 13 Application->MainFormOnTaskBar = true; 14 Application->CreateForm(__classid(TTCPClient), &TCPClient); 15 Application->Run(); 16 } 17 catch (Exception &exception) 18 { 19 Application->ShowException(&exception); 20 } 21 catch (...) 22 { 23 try 24 { 25 throw Exception(""); 26 } 27 catch (Exception &exception) 28 { 29 Application->ShowException(&exception); 30 } 31 } 32 return 0; 33} 34//---------------------------------------------------------------------------

Unit1.cpp

C++

1//--------------------------------------------------------------------------- 2 3#include <vcl.h> 4#pragma hdrstop 5 6#include "Unit1.h" 7 8using namespace std; // stringを使用するため 9#include <iostream> // cin,coutを使用するため 10#include <fstream> // ifstream,ofstreamを使用するため 11//--------------------------------------------------------------------------- 12#pragma package(smart_init) 13#pragma resource "*.dfm" 14TTCPClient *TCPClient; 15//--------------------------------------------------------------------------- 16__fastcall TTCPClient::TTCPClient(TComponent* Owner) 17 : TForm(Owner) 18{ 19} 20//--------------------------------------------------------------------------- 21void __fastcall TTCPClient::FormCreate(TObject *Sender) 22{ 23 AnsiString filename = "SaveFile.txt"; 24 25 ifstream fin; // ファイル読み込み用ストリーム 26 // SaveFile.txtのオープン(読み取り) 27 fin.open(filename.c_str(), ios::in); 28 29 // ファイルオープンが成功の場合(SaveFileが存在した場合 ) 30 if( !(fin.fail()) ) 31 { 32 string line; 33 string line02; 34 35 // SaveFile.txtのEOFまで 36 while(getline(fin,line)) 37 { 38 //cout << "[" << line << "]" << endl; 39 //line02 << "[" << line << "]" << endl; 40 line = "[" + line; 41 line = line + "]\r\n"; 42 line02 = line02 + line; 43 } 44 45 AnsiString str(line02.c_str()); 46 ShowMessage(str); 47 } 48 // SaveFileが存在しない場合 49 else 50 { 51 // 画面フォームのStatusBar1上にパネルがいくつあるかわからないため 52 // Items[0]でエラーになるため,↓に書き換え 53 //StatusBar1->Panels->Items[0]->Text = "Save file does not exist!"; 54 55 // StatusBar1にパネルがいくつあるかわからないため, 56 // SimpleTextプロパティに変更 57 StatusBar1->SimpleText = "Save file does not exist!"; 58 } 59} 60//---------------------------------------------------------------------------

Unit1.h

C++

1//--------------------------------------------------------------------------- 2 3#ifndef Unit1H 4#define Unit1H 5//--------------------------------------------------------------------------- 6#include <System.Classes.hpp> 7#include <Vcl.Controls.hpp> 8#include <Vcl.StdCtrls.hpp> 9#include <Vcl.Forms.hpp> 10#include <Vcl.ComCtrls.hpp> 11//--------------------------------------------------------------------------- 12class TTCPClient : public TForm 13{ 14__published: // IDE で管理されるコンポーネント 15 TStatusBar *StatusBar1; 16 void __fastcall FormCreate(TObject *Sender); 17private: // ユーザー宣言 18public: // ユーザー宣言 19 __fastcall TTCPClient(TComponent* Owner); 20}; 21//--------------------------------------------------------------------------- 22extern PACKAGE TTCPClient *TCPClient; 23//--------------------------------------------------------------------------- 24#endif

投稿2019/12/28 01:41

dem0nmichik0

総合スコア37

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問