
C++で以下のような構造体を使っています。(本当は他にもメンバが有ります)
// -----
typedef struct{
int *npMember;
}Test_t;
// -----
これをクラスのメンバ変数で
// -----
Test_t *m_tpTestStruct;
// -----
とし、関数の中で
// -----
m_tpTestStruct = new Test_t[10];
for (int i = 0; i < 10; i++) {
m_tpTestStruct[i].npMember = new int[100];
}
// -----
というようにメモリを割り当てています。
これを解放する時は、
// -----
for (int i = 0; i < 10; i++) {
delete [] m_tpTestStruct[i].npMember;
}
delete [] m_tpTestStruct;
// -----
で、良いのでしょうか?
それとも、他の書き方が必要なのでしょうか?
No.1ベストアンサー
- 回答日時:
それで良いです。
Test_t をクラスにして,配下のメモリ確保/解放を任せるという手もあります。蛇足かも。
No.2
- 回答日時:
その方法で結構です。
しかし、折角C++を使っているのですからメンバを隠蔽しましょう。
クラスのデストラクタでdelete[] npMemberを呼び出します。
//----------------------------------------------------------
class Test_t{
int* npMember;
public:
Test_t(int lenght)
{
npMember = new int[lenght];
}
~Test_t()
{
delete[] npMember;
}
};
//----------------------------------------------------------
Test_t* m_tpTestStruct = new Test_t[10];
for (int i = 0; i < 10; i++) {
m_tpTestStruct[i] = Test_t(100);
}
//----------------------------------------------------------
delete[] m_tpTestStruct;
//----------------------------------------------------------
for (int i = 0; i < 10; i++) {
delete [] m_tpTestStruct[i].npMember;
}
という方法は構造体メンバの配列の要素数、10を把握してなくてはなりません。
メンバに配列の要素数を加えるやり方はメモリの無駄ですし、メンバ配列の数が増えると管理し切れません。
しかもメンバ配列のdelete[]は忘れればメモリリークです。要素数を間違えればエラーになります。
回答ありがとうございます。
> 構造体メンバの配列の要素数、10を把握してなくてはなりません。
要素数は他の箇所でも使うので持っています。
教えていただいた方法は今後の参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
define で 配列
-
ループカウンタを使用せず、配...
-
c言語プログラミング 等差数列...
-
C言語 ファイルの指定された行...
-
C言語を使って、ファイルの読み...
-
エラーが出てしまいます
-
C#で配列が空かを判定するには?
-
配列を使わずに、変数名を動的...
-
C# DataGridView のヘッダーセ...
-
Integer変数をカラにしたいので...
-
Excelですべての組合せ(重複組...
-
ExcelVBAでのkernel32(64bit)
-
isalpha()関数について
-
Run-Time Check Failure #3とい...
-
allocってなんですか?
-
CStringからchar*への型変換に...
-
C言語 配列の長さの上限
-
「#undef」と「#define」の使い...
-
VBAのプログラムで、DIAG = 1# ...
-
C言語の配列のサイズ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
c言語
-
c言語プログラミング 等差数列...
-
define で 配列
-
配列の要素数に変数を入れたい...
-
C言語 ファイルの指定された行...
-
int i, int i[1];
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
C言語から質問です。
-
C#でのフィボナッチ数列
-
c言語 構造体
-
MFC - ダイアログボックスのPic...
-
構造体のextern方法
-
fclose()でセグメンテーション違反
-
C言語の課題が出たのですが自力...
-
2番目の最大値を求める
-
MFCのCArrayを使った二次元配列
-
const で宣言してるのに、値が...
-
配列の不正アクセスについて
おすすめ情報