访问违规阅读课堂上的位置

时间:2013-04-13 19:00:46

标签: c++ memory runtime-error

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

  

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

这似乎与我访问指针有关 我无法访问。

Main.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;
}

Example.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;
}

Example.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_

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

欢迎任何帮助!提前致谢:D

1 个答案:

答案 0 :(得分:7)

您的代码中有错误:

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;时,最终会释放不属于您的应用程序的内存,因此会遇到崩溃。