現在、STLコンテナでビルドされていない特定のライブラリを使用しています。いくつかの関数をクラスにリファクタリングすると、次のパターンに基づいてスタックオーバーフローが発生しました。クラスのメンバーであるとC++配列がクラッシュする
class Base
{
float values[1920 * 1080]; // causes overflow
public:
Base() {}
};
int main()
{
float values[1920 * 1080]; // does not
Base t;
}
私はあなたがBase::values
のための動的メモリを割り当てることができる知っているが、なぜそれがmain
でスタックオーバーフローが発生することはありませんが、Base
に、なぜスタック領域がBase
のためにそんなに小さいように見えるのでしょうか?おそらく、私はただ欠落していることは明らかです。
(たとえば上のVisual Studio 2017を使用してコンパイルされ、デフォルトのフラグ)
浮動小数点値[1920 * 1080];は「未使用変数」として削除されますか?または、スタックは1920 * 1080浮動小数点を保持するのに十分な大きさですが、1920 * 1080浮動小数点を保持するのに十分な大きさではありませんか?ちょうど私の前提) – WindyFields
main()にこれらの2つの行のうちの1つだけを残すと、スタックオーバーフローが発生しますか? – KjMag
@KjMag 'base t 'だけで' main() 'を残すと、' float values [...] 'があるかどうかにかかわらず、常に現在の配列サイズ' Base :: values'でクラッシュします。 – Alexander