小编som*_*one的帖子

C++多重继承和上传的智能指针破坏导致VS 2017中的堆损坏

我使用上面的代码遇到了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,无论继承顺序如何,它都运行良好.

c++ heap inheritance smart-pointers

4
推荐指数
1
解决办法
270
查看次数

标签 统计

c++ ×1

heap ×1

inheritance ×1

smart-pointers ×1