0

私は 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;
}

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

したがって、私が基本的に行うことは、コンストラクタでメモリを割り当て、デストラクタで割り当てを解除することです。

どんな助けでも大歓迎です!前もって感謝します:D

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 に答える