
以下のように構造体を 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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
MFCのCArrayを使った二次元配列
C言語・C++・C#
-
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
-
4
ボタンの配置を変更したい
C言語・C++・C#
-
5
VC++にてボタン等のサイズ取得
C言語・C++・C#
-
6
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
7
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
8
CStringとCByteArrayの変換
C言語・C++・C#
-
9
【MFC】CFileでSeekした位置から値出力したい
C言語・C++・C#
-
10
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ブレークポイントで止らない
-
[XSLT]累乗と平方根
-
CPUの考え方を教えてください ...
-
サーバー上にないxmlの読み込み
-
XMLSchemaの検証
-
TreeViewに重複する値をセット
-
同じ値がある時にエラーを出したい
-
C:経路検索アルゴリズム
-
名前空間の宣言の書き方
-
VB2005 TreeViewの任意ノード選択
-
VB6でXMLを処理するには
-
C#でTreeViewのCheckBoxのサイ...
-
バッチファイルでテキストファ...
-
DOSコマンドラインからxmlファ...
-
Java ファイルオブジェクトで...
-
TreeViewで複数ノードの選択は...
-
SNMP リンクダウンとノードダ...
-
HTTPステータス 404 - There is...
-
xmlとjavaで自動的にWEBが更...
-
XMLファイルの編集をExcel...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MSXMLを使ってノードを削除した...
-
ブレークポイントで止らない
-
動的な構造体配列の初期化
-
4バイトを10進数に変換する方法
-
concat関数内でのシングルクォ...
-
VB.NETで最後フォのフォ...
-
GNU VCDImager WHITEBOOK規格外...
-
XSLTでtest.xmlファイルのccc要...
-
[XSLT]累乗と平方根
-
aaa.comをサーバーで、www.aaa....
-
CPUの考え方を教えてください ...
-
タグの有無の判定
-
バッチファイルでテキストファ...
-
SNMP リンクダウンとノードダ...
-
東芝のDynabookなのですがアン...
-
XMLファイルの作り方がわかりま...
-
XMLで要素が記述された順番に意...
-
ルート要素ノードが2個ある場合?
-
複数のマックPCによる数値計算...
-
同じタグ名の項目取得
おすすめ情報