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