私にはいくつかの説明が必要なダムコードがあります。C++:さまざまな静的および動的ポインタタイプを削除する
int main() {
int *ptr_i = new int[100];
char *ptr_c = (char *)ptr_i;
delete [] ptr_c;
return 0;
}
まず第一に私がクラッシュするこのコードを期待していたが、それは私はこのケースではアロケータは、割り当てを解除するバイト数を追跡するので、あると信じているしませんでした。私もvalgrindをこのコードで実行しましたが、メモリリークはありません。 PODデータ型を扱う、どのように文字のc'torがintのそれとは異なりますとき場合
: は、私は、次に関する説明が必要?
コーディング規約とは別に、このコードではどのような問題がありますか?
未定義の動作のように見えます...未定義の動作のように歩いています... – StoryTeller
UBのように見えます。それらが非ポッド型の場合、デストラクタは決して呼び出されません。 – NathanOliver
"このコードでは他にどのような問題が発生する可能性がありますか。これは未定義の振る舞いの性質です。この質問は広すぎます。真剣に、それはあなたの実際の質問が何であるかは不明です。あなたはコードが間違っていることを知っているので( "ダム")、何を求めているのですか?とにかくそれはなぜ働くのですか?誰が知っているかは、実装に依存しており、推測するのに十分な情報を私たちに与えるわけではありません。なぜ答えが役に立つのか?このようなコードを書くべきではありません。 –