2012-01-16 7 views
1

には戻りません、:機能にエラーが発生していない、まだそれは、私はこの非常に迷惑な問題を持っているプログラム

void renderGame::renderMovingBlock(movingBlock* blockToRender){ 
    sf::Shape blockPolygon; 
    sf::Shape blockLine = sf::Shape::Line(blockToRender->getLineBegin().x,blockToRender->getLineBegin().y,blockToRender->getLineEnd().x,blockToRender->getLineEnd().y, 3.f,movingBlockLineColor); 

    for(auto i = blockToRender->getVertexArray()->begin(); i!=blockToRender->getVertexArray()->end(); ++i){ 
     blockPolygon.AddPoint(i->x, i->y, movingBlockBlockColor); 
    } 

    renderToWindow->Draw(blockLine); 
    renderToWindow->Draw(blockPolygon); 
} 

単純な関数である、それはオブジェクトへのポインタを取りますSFMLを使用して画面に表示します。これはレール上を移動する単純なポリゴンです。

getVertexArray()は頂点のオブジェクトのベクトルへのポインタを返し、renderToWindowはSFへのポインタである::私が持っているRenderWindowの

非常に奇妙な問題は、私はそれはそれから戻りません、この関数を呼び出すことができるということです、VC++休憩とに私を指す:

int __cdecl atexit (
     _PVFV func 
     ) 
{ 
     return (_onexit((_onexit_t)func) == NULL) ? -1 : 0; 
} 

は、私がここに奇妙なbehavoirを取得していますが、私は右の表示()関数およびシステム(「一時停止」)を呼び出すことによって終了する前にこの機能を停止することができ、それが表示されますすべてが完璧にはうまくいっていますが、さらに一歩進んで壊れます。

私は動的に割り当てられたオブジェクトを送信していると付け加えます。普通のものを設定するとすべてうまくいきます。私はプログラムをデバッグし、ポリゴンとラインが正しい座標を持ち、すべてが正しく表示されますが、関数から戻ることはできません。

+0

奇妙な...メソッドの最後に 'return;'を付けると変更されますか?つまり、 'renderToWindow-> Draw'呼び出しから復帰しますか? – shinkou

+0

いいえ、何も変わりません – dreta

答えて

4

以前にどこかでスタックを混乱させたような関数がサウンドを返さない場合、これは境界外の書き込みである可能性が高いです。

おそらくあなたがatexitで終わっているので、キャッチされない例外がスローされた可能性があります。

いずれかの方法 - プログラミングの喜びを歓迎 - 今、あなたはおそらく、あなたの関数が

を立ち往生する前に、いくつかのvalgrindのようなツール(Windows用の使用可能な場合)またはいくつかを試みることができる長い起こるエラーを見つけなければなりません他の境界チェッカー。

+0

/MTとしてランタイムライブラリを設定しました。/ MDに変更しました。今のところすべてが動作します。どうすればこの問題が分かったのか分かります。 – dreta

+0

コードに競合状態があります。 –

+0

あなたは説明できますか? – dreta

関連する問題