次のコードは可変長配列を生成することを理解しています(C++の非標準拡張を介して)。可変長配列がスタック/ヒープ上に作成されているかどうかを確認する方法はありますか?
int main()
{
int valone = rand();
int valtwo = rand();
int array[valone][valtwo];
// Printing size
cout << sizeof(array) << endl;
}
スタックまたはヒープで生成されたかどうかを確認する方法はありますか?ウィキペディアの説明hereは、gcc
が同じスタックを生成すると言いますが、上記のコードを試してみると、ほとんどの場合、配列のサイズは大きすぎてスタックに収まらないようですが、それは不平を言うことはありません。
注:このコードは、Visual Studioとgccの&打ち鳴らすとない
C99ではなく、C++について語るウィキペディアのリンクです。 'gcc'はC99コードとC++コードを同じように扱っているかもしれません。 –
標準的な方法についてはわかりませんが( "標準"は "非標準的な拡張子"にも当てはまります)、 'valtwo'と' array [0] 'のアドレスを比較することができます。配列がスタック上にある場合、それらは隣接する必要があります。もしヒープ上にあれば、それらはかなり異なるでしょう。これは100%信頼できるものではありませんが、ほとんどの場合動作します。 – Mikhail
一時的なストレージの外にアクセスするまでは、おそらく不平を言いませんが、確かに分かっていますか? – user4581301