0

我有以下代码:

#include <vector>
#include <algorithm>
#include <memory>

struct monkey
{
    int mA, mB;

    monkey(int a, int b) : mA(a), mB(b)
    {
    }
};

typedef std::shared_ptr<std::vector<monkey>> MonkeyContainer;


int main()
{
    MonkeyContainer monkeyContainer;
    monkeyContainer->emplace_back(1, 2);
}

它总是崩溃emplace_back()。然而它编译得很好,我看不到任何问题。为什么会崩溃?这是抛出的异常和代码行:

Unhandled exception at 0x00FE2299 in ConsoleApplication2.exe: 0xC0000005: Access violation reading location 0x00000008.

vector.h - line 894: _VARIADIC_EXPAND_0X(_VECTOR_EMPLACE, , , , )

我正在使用 VS2012 并尝试使用 11 月 CTP 和默认编译器。

由于缺乏增强支持和其他因素,我无法使用 VS2013 atm - MSVC11 有修复吗?

4

2 回答 2

2

您需要创建一个vector<monkey>将由shared_ptr.

MonkeyContainer monkeyContainer;

在上述语句之后,shared_ptr指向nullptr( monkeyContainer.get() == nullptr),并将其推迟到调用emplace_back会导致崩溃。将上面的行更改为

MonkeyContainer monkeyContainer = std::make_shared<std::vector<monkey>>();
于 2013-10-07T21:52:34.447 回答
1

您没有初始化MonkeyContainer指针。它指向NULL当你尝试的时候emplace_back

于 2013-10-07T21:44:13.900 回答