以下のコードを実行したときの実行結果についてわかりません。言語はC++となってますが、C言語です。連続して領域を確保すると、どのように考えればよろしいでしょうか?単なるバッファーオーバーランによる未定義動作の結果なので,「たまたまこうなった」としか考えようがないです。(char*)calloc(20,sizeof(char));メモリがaとbで連続した領域を確保できたため、事実上のa[40]になったことが原因だと思います。プログラム実行直後だから起きた出来事ですね。何度もメモリの確保と解放を繰り返した影響でメモリが断片化した状態で行えば、a[20]とb[20]で別々の場所にメモリが確保されるはずのなので、再現できる可能性は限りなく低いと思いますよ。C++、メモリ断片化しますよね?(そこが自信ない結構説明が下手ですのでご了承ください。言葉が足りなかったり文字だらけで分かりにくかったりします。2年前まず、C言語では確保された領域の外にアクセスすると未定義動作となり、何があってもおかしくありません。メモリがaとbで連続した領域を確保できたため、事実上のa[40]になったことが原因だと思います。a」の12文字が抜けており、領域は連続していません。これは、メモリの管理に使う情報が入るためか、32バイトのアラインメントに合わせるためであると考えられます。ご回答ありがとうございます。このような結果となってしまった理由について、お願いしたいと思います。aとbは不連続な領域をとり、aとbの間の領域に消えた12文字が存在する。このような結果となってしまった理由について、お願いしたいと思います。どのように考えればよろしいでしょうか?こんな未定義動作の危険なコードを書くのはやめよう、未定義動作を起こさないように気をつけよう、と考えるのがいいでしょう。依存する部分だと思います。キーワードで検索すれば、どのようにメモリ領域が割り当てられるかを説明しているページが数多くヒットするので、幾つか探してみてはいかがでしょうか。動画と呼ばれる有名な動画もあります。このような結果となってしまった理由について、お願いしたいと思います。aとbは不連続な領域をとり、aとbの間の領域に消えた12文字が存在する。順当に割り当てられた結果だと思います。いう内部関数が呼ばれます。3db04#l496上記ソースコード中のコメントに、各チャンクの構造が略図で示されています。バイトということになります。各チャンクが管理データを持っているため、管理データの長さがチャンク間の長さに寄与することはなさそうです。