• ベストアンサー

構造体のメンバーのメモリ確保

以下のようなイメージのコードでエラーは発生します。 どうしてでしょうか? よろしくお願いします。 typedef struct list{ wchar_t* Item; }; list* lst = (list*)malloc(sizeof(list)); lst->Item = (wchar_t*)malloc( sizeof(wchar_t) + sizeof(wchar_t) ); lst->Item = L"1\0"; free(lst->Item);//ここでエラー発生 free(lst);

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

> lst->Item = L"1\0"; この行でmallocで割り当てられた領域へのポインタはリテラル文字列へのポインタ(L"1\0")で上書きされてしまっています。 この部分は正しくは > wcsncpy(lst->Item, L"1\0", sizeof(wchar_t) + sizeof(wchar_t)); ですね。

milkoX
質問者

お礼

ご回答ありがとうございます。 なるほど、そういうことでしたか。 実は自分のコードは既にそのようになってますが、 メモリ範囲の外に\0を入れてしまったのがこちらの ほんとうの原因のようでした。 #投稿したコードはテストコードですので、そんなことなかったですが。 VSのデバッグではそこまで気が付きませんでした。 小さいところではありますが C/C++の恐ろしさ、強力さ、柔軟さが感じられました。 ますます好きになってきました。PGの腕がないと使いこなせませんね。。 しかしこれは大変勉強になりました。 >> lst->Item = L"1\0"; >この行でmallocで割り当てられた領域へのポインタはリテラル文字列へのポインタ(L"1\0")で上書きされてしまっています。

関連するQ&A

専門家に質問してみよう