ja spotkałem, co wydaje mi się być uszkodzony wirtualny stół, który wynika z budowy i funkcjonowania zamieszczonych poniżej przykładowy kod w Visual Studio 2015.uszkodzony wirtualny stół studio visual bug
Kiedy go uruchomić, wyjątek jest generowany, gdy przypisano m_string.
Sprawdziłem, że kod jest budowany i działa zgodnie z zamierzeniami przy użyciu kompilatorów zarówno gcc, jak i Clang.
Próbowałem uczynić przykład tak minimalnym, jak to możliwe, ponieważ został zsyntetyzowany z bardzo dużego projektu.
Ponadto zdaję sobie sprawę, że zwracam wartość null z niektórych funkcji - rzeczywista wartość zwracana nie jest istotna dla problemu, ale może to być typ zwracany. Czy to możliwe błąd 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;
}
czy masz dostęp do poprzedniej wersji MSVC? – Igor
Skorzystaj z witryny connect.microsoft.com, aby zgłosić ten problem lub zadzwoń do pomocy technicznej firmy Microsoft, gdy nie możesz się doczekać. –
Przynajmniej mogę poprawić twoje obserwacje, jak widać [tutaj] (http://coliru.stacked-crooked.com/a/e6b49c3b451dc769) i [tutaj] (http://coliru.stacked-crooked.com/a/0c5d90a1ebbd3a68). –