
以下のように構造体を 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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4バイトを10進数に変換する方法
-
VBA コードを中断するには?
-
concat関数内でのシングルクォ...
-
aaa.comをサーバーで、www.aaa....
-
TreeViewコントロールについて
-
XML、XSLTの適応エラー(IEから...
-
ルート要素ノードが2個ある場合?
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
TreeVIewのノード名を編集する...
-
XML::LibXMLのfindnodes()で、...
-
各ノードの行数取得
-
XMLとXSLTでリンクを張る方法
-
ツリーでのアイコンの設定
-
バッチファイルでテキストファ...
-
DOSコマンドラインからxmlファ...
-
縁切りするとき
-
Access2000レポート
-
IE7とDOCTYPE宣言について
-
ノードとは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ブレークポイントで止らない
-
MSXMLを使ってノードを削除した...
-
4バイトを10進数に変換する方法
-
動的な構造体配列の初期化
-
VB.NETで最後フォのフォ...
-
concat関数内でのシングルクォ...
-
tableを3段組みにしてsortをか...
-
[XSLT]累乗と平方根
-
aaa.comをサーバーで、www.aaa....
-
GNU VCDImager WHITEBOOK規格外...
-
html上のセレクトボックスを使...
-
XML表示を2段階で…
-
VB2008EEラジオボタンにて、
-
XSLTでtest.xmlファイルのccc要...
-
Math.sqrt(Math.pow(canvas.wid...
-
XMLのエラーコードの意味が理解...
-
XMLの値をリストボックスで選択...
-
removeChildを使っても変化なし...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
おすすめ情報