我使用上面的代码遇到了VS调试器的问题:
class Animal {
public:
};
class Stupid {
public:
};
class Dog : public Stupid, public Animal {
public:
};
int main() {
std::unique_ptr<Animal> animal = std::unique_ptr<Dog>(new Dog());
animal.reset();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行"animal.reset()"涉及"ntdl.dll"和"wntdll.pdb"后,此代码抛出错误.
以下是MSVC运行时库生成断言失败的表达式,如果我点击"忽略"多次(3)次:
1- _CrtIsValidHeapPointer(block)
2- is_block_type_valid(header->_block_use)
3- HEAP CORRUPTION DETECTED: before Free block (#-50331640) at 0x03737E21. CRT detected that the application wrote to memory before start of heap buffer.
Run Code Online (Sandbox Code Playgroud)
但是如果我改变了Dog的继承顺序,就像这样:
class Dog : public Animal, public Stupid {
public:
};
Run Code Online (Sandbox Code Playgroud)
代码运行正常.
我只在Visual Studio 2017中出现此错误,我尝试使用Ideone,Android Studio,无论继承顺序如何,它都运行良好.