
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で質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
1 つのヘッダファイルに複数のクラスって?
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
MFC - ダイアログボックスのPic...
-
配列の要素数に変数を入れたい...
-
C#で構造体の配列を持った構造...
-
define で 配列
-
2番目の最大値を求める
-
C#で配列が空かを判定するには?
-
c言語プログラミング 等差数列...
-
構造体のextern方法
-
配列のNULL初期化について
-
C言語の2次元配列 容量が大き...
-
二次元配列について
-
C言語 ビットフィールドについて
-
vector配列の重複を無くすには?
-
配列の不正アクセスについて
-
MFCのCArrayを使った二次元配列
-
c言語
-
.NET C++で、構造体の配列をnew...
-
配列のアドレス部
-
C言語において、 配列要素をひ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語プログラミング 等差数列...
-
define で 配列
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語 ファイルの指定された行...
-
VB.NETにおける構造体の初期化
-
C言語の2次元配列 容量が大き...
-
コンボボックスでデフォルト値...
-
MFC - ダイアログボックスのPic...
-
C#で配列が空かを判定するには?
-
Cのエラー
-
C言語についてです 5人のテスト...
-
C言語の配列のコピーについて
-
この変数名はわかりにくいですか?
-
C++:構造体:newで入れ子:del...
-
2番目の最大値を求める
おすすめ情報