以下のように構造体を new で動的に確保したときに
構造体の中身(char bbb[10], int ccc)をゼロで初期化したいのですが
ZeroMemory を使用するとCArrayのAdd()を使用したときにエラーになってしまいました。
何かよい方法がありましたら教えて下さい。お願いいたします。
# 簡単にイメージですが・・・
typedef struct
{
CString a;
CString b;
}aaa_t ;
struct s_aaa{
char bbb[10];
int ccc;
CArray<aaa_t,aaa_t> m_aaaArray ;
}
s_aaa *StructB;
StructB = new s_aaa [10];
No.2ベストアンサー
- 回答日時:
ZeroMemory( StructB, sizeof( s_aaa) * 10);
とかやってるならNGですね。m_aaaArrayも0クリアしてるので管理情報を破壊しています。
基本的にクラスを0クリアしてはいけません。そのクラスのコンストラクタにお任せする物です。
対策案1
newしたあと、構造体のbbb[10]とcを自前で0クリアする。
→面倒だし汚い。
対策案2
struct s_aaaをclass s_aaaに置き換え、コンストラクタでbbb[10]とcを0クリアする。
→これが普通の対応。
対策案3
struct s_aaaのままコンストラクタを作成し、bbb[10]とcを0クリアする。
構造体もコンストラクタはおけます。
→美しくない。classにしない意味もない。
>ZeroMemory( StructB, sizeof( s_aaa) * 10);
まさしく、この処理を行っていたのが原因でした。
>struct s_aaaをclass s_aaaに置き換え、コンストラクタでbbb[10]とcを0クリアする。
この方法で無事に動作しました!!
C++の構造体はclassと書いても大丈夫だったり、構造体の中にコンストラクタを書けたりと非常に勉強になりました。本当にありがとうございました。
No.3
- 回答日時:
↓でどうでしょう。
std::fill(StructB, StructB + 10, s_aaa());
>std::fill(StructB, StructB + 10, s_aaa());
自分では詳しい原理を今ひとつ理解できませんでしたが、こういう方法もあるんですね。参考になりました。本当にありがとうございます。
No.1
- 回答日時:
>ZeroMemory を使用するとCArrayのAdd()を使用したときにエラーになってしまいました。
肝心の部分が書かれていませんが、
要は struct s_aaa の中身を「のっぺりと」ゼロ埋めしたということですか?
CArray<> がどんなのかもわかりませんが、その内容すべてを破壊しているのではないですか?
>要は struct s_aaa の中身を「のっぺりと」ゼロ埋めしたということですか?
はい。その通りです。
> CArray<> がどんなのかもわかりませんが、その内容すべてを破壊しているのではないですか?
まさしくその通りでした。CArrayはクラスになるので、詳しい部分はよく理解できていませんが、中身を全部ゼロ埋めしたためにクラスの領域(言葉が適切ではないかもしれませんが・・・)を破壊していたのが原因のようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
-
4
MFCのCArrayを使った二次元配列
C言語・C++・C#
-
5
エディットボックスの入力制限について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動的な構造体配列の初期化
-
concat関数内でのシングルクォ...
-
4バイトを10進数に変換する方法
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
VBSでxmlの値を書き換えたい
-
複数のマックPCによる数値計算...
-
Excel-VBAでXMLの複数ノードの...
-
VBSでXMLを読込、検索結果をテ...
-
特殊記号が勝手にエスケープさ...
-
XMLで要素が記述された順番に意...
-
タグの有無の判定
-
XMLファイルの作り方がわかりま...
-
SNMP リンクダウンとノードダ...
-
同じタグ名の項目取得
-
XML同じ名前の要素を自動で集約...
-
XML、XSLTの適応エラー(IEから...
-
excelにてweb関数を使い、webデ...
-
VBAでXMLを出力するプログラム...
-
昔Winnyってありましたけど、あ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
4バイトを10進数に変換する方法
-
VB.NETで最後フォのフォ...
-
動的な構造体配列の初期化
-
concat関数内でのシングルクォ...
-
XMLのエラーコードの意味が理解...
-
MSXMLを使ってノードを削除した...
-
Math.sqrt(Math.pow(canvas.wid...
-
CPUの考え方を教えてください ...
-
バッチファイルでテキストファ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
XMLファイルの作り方がわかりま...
-
昔Winnyってありましたけど、あ...
-
XML、XSLTの適応エラー(IEから...
-
同じタグ名の項目取得
-
タグの有無の判定
-
XPathで途中に名前空間が設定さ...
-
あるノードリストに、特定の名...
おすすめ情報