0

我对 C++ 很陌生,我一直在玩指针和类。我遇到了一个问题,到目前为止我还没有找到解决方案:

RAII.exe 中 0x77F87508 (msvcr110d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xCCCCCCC0。

这似乎与我访问一个我无权访问的指针有关。

主要.cpp:

#include <memory>
#include <iostream>
#include "Example.hpp"

void example()
{
    Example e;
}

int main()
{
    example();
    std::cout << "Press any key to exit";
    std::cin.get();
    return 0;
}

示例.cpp:

#include "Example.hpp"

Example::Example()
{
    m_a = new int(1);
    m_b = new int(2);
    m_b = new int(3);
}

Example::~Example()
{
    delete m_a;
    delete m_b;
    delete m_c;
}

示例.hpp:

#ifndef _EXAMPLE_HPP_
#define _EXAMPLE_HPP_

#include <memory>
#include <iostream>

class Example
{
private:
    int *m_a;
    int *m_b;
    int *m_c;
public:
    Example();
    ~Example();
};

#endif _EXAMPLE_HPP_

所以,我基本上做的是在构造函数中分配内存并在析构函数中释放它。

欢迎任何帮助!先谢谢了

4

1 回答 1

8

您的代码中有一个错误:

Example::Example()
{
    m_a = new int(1);
    m_b = new int(2);
    m_b = new int(3); // <--- you probably meant it to be m_c
}

因此,当您调用delete m_c;析构函数时,您最终会释放不属于您的应用程序的内存,因此会遇到崩溃。

于 2013-04-13T19:03:06.583 回答