我有一個奇怪的問題,試圖讓我的發佈版本在Xcode 4.2中使用llvm工作。我已經關閉了發佈方案的所有優化設置,並且據我所知,發佈版本與調試版本的所有設置相匹配。無論如何,使用Box2D(一個物理庫)的某些結構時會發生以下問題 - 但我不確定問題是否具體說明了該問題。錯誤發佈版本,從std :: vector複製結構
b2CircleShape* circleShape = new b2CircleShape();
circleShape->m_p.Set(0,0);
circleShape->m_radius = m_radius;
b2FixtureDef fixture;
fixture.shape = circleShape;
fixture.density = m_density;
m_fixtureDefs.push_back(fixture); // std::vector
b2FixtureDef fix2 = fixture;
b2FixtureDef fix3 = m_fixtureDefs[0] // EXC_BAD_ACCESS
當我刪除所有對m_fixtures的訪問實例時,沒有發生任何問題。當我在開發計劃中運行時,不會發生錯誤。我真的,真的很困惑,如果有人能在正確的方向指向我的錯誤尋找它,將不勝感激
編輯:
更多有趣的東西
for (vector<b2FixtureDef>::iterator i = m_fixtureDefs.begin() ; i != m_fixtureDefs.end(); ++i)
{
}
這似乎循環永遠,讓我非常困惑。看起來像結構m_fixturesdef有一些問題,但我不知道爲什麼奇怪的腐敗只發生在這個特定的變量。
它看起來像一個內存錯誤,所以它將很難調試。你應該嘗試用valgrind運行它。另外,是否可以在'm_fixtureDefs'之前將'circleShape'刪除? – juanchopanza 2012-04-19 05:45:42
我現在就試試。不,第一個摘錄是代碼中的「原樣」。 – Tomas 2012-04-19 05:55:50
檢查默認構造函數b2FixtureDef :: b2FixtureDef()並複製構造函數b2FixtureDef :: b2FixtureDef(const b2FixtureDef&)b2FixtureDef :: operator =(const b2FixtureDef&)。使用調試打印查看變量值和程序流程。 – alexander 2012-04-19 06:23:24