2010-12-30 8 views
0

私は8ヶ月ほどiPhoneの開発を行っており、一般的な生活は良いです(例外はopenGLです)。iPhone:一般的なデバッグのヒント

iPhone 3Dゲームを構築していて、うまくいきました。それはシミュレータ上で正常に動作します(私は真のテストではありません)、デバイス上で正常に動作していました。

今、デバイスで死んで、非常にランダムなものを指しているようです。初めて死ぬ(「EXC_BAD_ACCESS」)はデリゲートの設定です。

NSString *url = [NSString 
stringWithFormat:@"%@GetPlayerPosition.aspx?playerIndex=%@", 
self.baseURL, self.deviceID]; 
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]];  
[request setDelegate:self]; 

コードを削除するだけです。

がGLFloatアレイ

GLfloatのV [] = {センター[0]アクセスしようとしたとき、それは死ぬ次回は - 眼[0]、 中心[1] - 目を[1] 、センター[2] - 目[2]};

もう一度非常にランダムで、今まで働いていました。そのメモリのように実行され、ちょうど満員です。誰にもアイデアはありますか?クラスのサイズには限界がありますか?

一般的に私はこれを解決することができますが、作業用のバージョンに戻っていくつかのコードを再実装し、その後ランダムな動作を開始します。

私は漏れをチェックし、私は元気です

UPDATE:パート2

右私の.hファイルの私のインターフェイスに私は私の.mで

GLfloat eye[3]; 

を持って、私が割り当てることができます各要素の値は、それは私が行う場合

正常に動作します

NSLog(@"%f",eye[0]); 

クラッシュします。どうしてこれなの?

答えて

1

センターとアイはどのように宣言されていますか?それらはインスタンス変数、グローバル変数または静的変数ですか?何らかの理由で、これらの配列のメモリが、コールバックが発生するまでに解放されている可能性があります(これは、浮動小数点配列を初期化する行が失敗する理由を説明します)。

+0

これらはインタフェース(.h)で宣言されています GLfloat center [3]; GLfloat eye [3]; – Burf2000

+0

クラスのインスタンス変数ですか?そうであれば、おそらくクラスが解放されているかもしれません。通常、ブロックによって使用されるものはすべて保持されますが、これらはプリミティブ型なので、保持するクラスは保持しません。 1つの手法は、作成するASIHTTPRequstオブジェクトをクラスインスタンス変数として保持し、そのクラスのdeallocで要求をキャンセルすることを確認することです。 –

+0

したがって、パブリックインターフェイスで宣言されたばかりです。ブロックを完全に取り除いても、後でプリミティブで死ぬ – Burf2000

1

EXC_BAD_ACCESSは、しばしば時期尚早な割り当て解除の症状です(たとえば、解放されたオブジェクトが何度もリリースされたために、そのオブジェクトにアクセスしようとしています)。

それは[...]細かい仕事をしていた今、あなたがそれらの2つのタイムスタンプとの間で変更内容を確認するためにあなたのリビジョンログを見る必要があるよう

がサウンド死ぬようです。

+0

センター[3]とアイ[3]は解放されるべきではありません。あなたができるとは思わないので、私はそれらをプロパティとして設定していません。 – Burf2000

2
  • クラッシュ(またはクラッシュ)が発生した場合、バックトレースが発生します。それらを投稿する。

  • 「ビルドと分析」を試してください。それがあなたに与える警告を修正してください。コンパイラがあなたに与える警告も修正してください。適切に書かれたアプリは、警告なしでコンパイルする必要があります。

  • なぜコード行に__blockがあるのですか?そこには何のブロックもないようです。

ソフトウェアを作成するときにランダムに壊れることはありません。一見無関係の変更で何かがクラッシュし始めると、コードは常に破損していた可能性がありますが、後の変更までは致命的な問題を引き起こしていない可能性があります。


あなたはrequestへの書き込みをされていないので、__blockとしてその変数をマークする理由はありません。 __blockrequestでないため、は保持されるため、オブジェクトが早期にリリースされている可能性があります。&は割り当て解除されています。多分。

どのようにフロート配列を割り当てていますか?

+0

警告またはリークは見つかりませんでした。その浮動小数点配列と何かを確認してください – Burf2000

+0

私はブロックとしてマークしたと思いますので、完了メソッドを使用できます。ブロックとリクエストオブジェクト全体を取り出しました。しかし、通常のコードはNSLog(@ "%f"、eye [0])でクラッシュします。 eye []に​​値が設定されていても – Burf2000

+0

ブロックは問題ありません。 '__block'は必要ありません。 – bbum

関連する問題