Ich habe festgestellt, was mir scheint, eine beschädigte virtuelle Tabelle zu sein, die vom Aufbau führt und den Betrieb der Beispielcode unten in Visual Studio geschrieben 2015beschädigt virtuellen Tisch Visual Studio Bug
Wenn ich es laufen, ist eine Ausnahme geworfen, wenn m_string zugewiesen wurde.
Ich habe überprüft, dass der Code erstellt und wie vorgesehen ausgeführt wird, mit beiden GCC und Clang Compiler.
Ich habe versucht, das Beispiel so minimal wie möglich zu machen, da es aus einem sehr großen Projekt synthetisiert wurde.
Auch ich merke, dass ich null von einigen der Funktionen zurückgeben - der tatsächliche Rückgabewert ist nicht relevant für das Problem, aber der Rückgabetyp möglicherweise. Ist das ein möglicher Visual Studio Bug?
#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;
}
erwähnt haben Sie Zugriff auf eine frühere Version von MSVC? – Igor
Verwenden Sie connect.microsoft.com, um dieses Problem zu melden, oder rufen Sie Microsoft Support an, wenn Sie nicht warten können. –
Zumindest kann ich Ihre Beobachtungen verbessern, wie Sie [hier] (http://coliru.stacked-crooked.com/a/e6b49c3b451dc769) und [hier] (http://coliru.stacked-crooked.com/a/0c5d90a1ebbd3a68) sehen können). –