2016-05-13 23 views
-2

VS 2013のエラーに問題があります。 私は実際に実行できるプログラムを持っています。私はプログラムの開発を実行している、それはcrashs、私はこのエラーを取得しながら、以下の場合はループ内で入力すると、しかし:v1.exeの0x00007FF7214BAB0Cの最初の例外:0xC0000005:アクセス違反の読み取り場所0xFFFFFFFFFFFFFFFF

void Mouvement::processFrame(bool boolarray[], Game * game){ 
    if (boolarray[0]){ 
     qDebug() << game; 
     qDebug() << game->getPlayer1()->aNumber; 
    } 
} 

Mouvement.cpp

First-chance exception at 0x00007FF7214BAB0C in v1.exe: 0xC0000005: Access >violation reading location 0xFFFFFFFFFFFFFFFF. Unhandled exception at 0x00007FF7214BAB0C in v1.exe: 0xC0000005: Access >violation reading location 0xFFFFFFFFFFFFFFFF.

私はaNumberであることを言及したいと思いますPlayerクラスのpublic int属性です。 QDebugはゲームのポインタを認識することができますが、Player1の取得は問題の発生場所と思われます。ここ は、それがコードです:

Game.cpp

Player * Game::getPlayer1(){ 
    return this->player1; 
} 

Game.h

#ifndef GAME_H 
#define GAME_H 

#include <QGraphicsView> 
#include <QWidget> 
#include <QGraphicsScene> 
#include "Player.h" 
#include "Keyboard.h" 

class Game : public QGraphicsView{ 
public: 
    Game(QWidget * parent = 0); 
    Player * getPlayer1(); 
    Player * getPlayer2(); 
    Player * player1; 
    Player * player2; 
    void number(); 

    QGraphicsScene * scene; 
private: 
    Keyboard * keyboardHandler; 
}; 

#endif // GAME_H 

私はC++とQtの初心者ですから、答えはばかげているかもしれません。

+6

'qzdae48679jkl'?本当に? – SergeyA

+0

実際にテーブルに何があるのか​​を覚えていたので、それは馬鹿に見えますが、それは自分のロジックです。 – pepece

+1

Visual Studioで[デバッグ/例外]タブの場合は、Win32例外のアクセス違反でブレークを有効にします。次に、デバッガがブレークしたときに、エラーの原因となったコードの行までコールスタックに従います。 – drescherjm

答えて

0

多くの場合、「アクセス違反」は「セグメンテーション違反」と同義です。つまり、アクセス権のないメモリにアクセスしようとしています。これは、たとえば、正しく初期化されていない配列の要素にアクセスしたとき、またはその終わりを過ぎた要素にアクセスしたとき、または初期化されていないポインタを逆参照しようとしたときなどに発生します。あなたのケースでは

、私は次のようにします:

if ((game == NULL) || (game->getPlayer1() == NULL)) 
    throw std::runtime_exception("Null pointers"); 

if (qzdae48679jkl && game && qzdae48679jkl[0]){ 
    qDebug() << game; 
    qDebug() << game->getPlayer1()->aNumber; 
} 

これは、すべてのポインタがそれらにアクセスする前にnull以外であることをテストします。しかし、これでは十分ではないことに注意してください。 player1player2NULLに設定されているか、Gameのすべてのコンストラクタで正しく初期化されていることも確認してください。

+0

実際には、ループの最初の行を実行できるので、qzdae48679jkl [0]が "true"であることを読み取ることができるので、その点がわかりません。私は2行目に入ったときに壊れます: 'qDebug()<< game-> getPlayer1() - > aNumber; } 'まだ、答えをありがとう... – pepece

+0

@pepece私の編集を参照してください。 – Sheljohn

+0

'qDebug()<< game;' QGraphicsView要素へのポインタであり、これが真であることを教えてください。しかし、QDebug()<< * game;を表示することはできません。なぜなら、intellisenseによると、QGraphicsViewクラスに<<オペランドがないからです。 – pepece

関連する問題