が破損しましたm_stringが割り当てられたときにスローされます。は、私はそれを実行すると、例外はある例のコードは、Visual Studioでの下に2015年</p> <p>投稿を構築し、実行した結果、破損した仮想テーブルであることを私には思われるものが発生している仮想テーブルのVisual Studioのバグ
私は、gccとClangの両方のコンパイラを使用してコードが意図したとおりにビルドされて動作することを確認しました。
非常に大きなプロジェクトから合成されたので、私はこの例を可能な限り小さくしようとしました。
また、私はいくつかの関数からnullを返すことを認識しています。実際の戻り値は問題とは関係ありませんが、戻り値の型がある可能性があります。これはVisual Studioのバグですか?
#include <iostream>
#include <memory>
#include <string>
struct A { virtual ~A(void) { } };
struct B { virtual ~B(void) { } };
struct C : public A, public B { virtual ~C(void) override { } };
struct D
{
virtual ~D(void) { }
virtual B *func(void) = 0;
};
struct E : public D
{
virtual ~E(void) override { }
virtual C *func(void) override { return nullptr; }
};
struct F : public A, public E
{
virtual ~F(void) override { }
C *func(void) override
{
m_string = "Why does the act of setting this field cause a crash?";
return nullptr;
}
std::string m_string;
};
int main(int argc, char **argv)
{
std::unique_ptr<F> pF(new F());
(dynamic_cast<D *>(pF.get()))->func();
pF->func();
return 0;
}
MSVCの以前のバージョンにアクセスできますか? – Igor
connect.microsoft.comを使用してこの問題を報告するか、待機できないときにMicrosoftサポートに電話してください。 –
少なくとも私は[ここ](http://coliru.stacked-crooked.com/a/e6b49c3b451dc769)と[ここ](http://coliru.stacked-crooked.com/a/0c5d90a1ebbd3a68)のようにあなたの観察を改善することができます)。 –