w2k VC++6.0 MFC ダイアログ
以上の環境で作成したプログラムを
実行後,「(デフォルトである)OK」や,「(デフォルトである)キャンセル」
を押して,終了しても,
Windowsタスクマネージャのプロセスには,まだ実行中を装っています
Windowsタスクマネージャのアプリケーションには,もう存在しませんが(←当然)
具体的には,プロセスタブにて,CPUの値が99%になっています.
また,VC++にて,再実行ができません(起動中だからという理由でしょう)
これに関して,何かアドバイスありましたら
些細なことでもかまいません.
どうぞよろしくお願いします.
追記です
一応,解決しました.
原因は,配列の宣言した場所でした
/////////////////////////////////////////////////////////////////////////////
// CCGDlg ダイアログ
class CCGDlg : public CDialog
{
// 構築
public:
CCGDlg(CWnd* pParent = NULL); // 標準のコンストラクタ
// ダイアログ データ
//{{AFX_DATA(CCGDlg)
enum { IDD = IDD_CG_DIALOG };
CProgressCtrl m_prog_ex_num;
CStatic m_pict;
//}}AFX_DATA
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CCGDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサ
ポート
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
HICON m_hIcon;
// 生成されたメッセージ マップ関数
//{{AFX_MSG(CCGDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBUTTONfileopen();
afx_msg void OnBUTTONmono();
afx_msg void OnBUTTONunnoise();
afx_msg void OnBUTTONsharp();
afx_msg void OnBUTTONlapla();
afx_msg void OnBUTTON2tika();
afx_msg void OnBUTTONhist();
afx_msg void OnBUTTONbrd1();
afx_msg void OnBUTTONbrd2();
afx_msg void OnButtonNmbring();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnBUTTONchar();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
① double circum_len[100]; //周囲長
};
② double circum_len[100]; //周囲長
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
このように,②で宣言すれば,問題なかったのですが,
①で宣言すると,先ほど説明いたしましたように,プロセスが終了しなかったり
たまにShift+F5による実行でさえ,非常に時間がかかったりしました.
このdouble circum_lenというのは,
afx_msg void OnBUTTONchar();
afx_msg void OnBUTTONbrd2();
で使いたいので,ここでのpublicとして
宣言したく思い,
まだ同時に,グローバル変数は管理が難しいのでなるべく避けたいと
思っています.
よろしくお願いします.
追記です,何度もすみません
public:
double circum_len[100];
をやめて,
public:
double* circum_len;
コンストラクトで
circum_len=NULL;
とか
実際に利用する場面で配列作成
circum_len=new double[100];
って修正したら,問題なくいきました.
この方法は以前から習慣として利用してきたものですが,
なぜ,これでないとダメなのでしょうか(ダメとは言い過ぎで
ケースバイケースかもしれませんが).
クラス宣言時のpublicには,配列を宣言しては
いけないのでしょうか
クラスメンバに配列があっても問題ありません。
この配列の存在がプログラムの実行に影響するとも思えません。
なにか他の要因があるような気がします。
配列の範囲外に書き込んでプログラムを破壊しているとか。
そうですよね.
別に配列宣言しても問題ないはずですよね・・・
それだけ聞いて安心しました.
ありがとうございました