2012-01-10 5 views
0

下の 'CortexA8' 問題は、私のような多くの(非常に多くの)クラッシュレポート受信されています:memsetのiOS5を私が始めている通りを打つので、iOS5を

... 
Exception Type: SIGSEGV 
Exception Codes: SEGV_ACCERR at 0x0 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libsystem_c.dylib 0x35ec4b3c memset$VARIANT$CortexA8 + 116 
1 FooApp    0x0005ba25 -[FooViewController prepareShapes] (FooViewController.m:808) 
... 

を関連する詳細情報:

  • XCodeの4.2
  • LLVM 3.0
  • 'ARMv6以降のARMv7' アーキテクチャ
  • のiOS 5のベースSDK
  • iOS 4.0をターゲットにする
  • iOS5(すべてのiOS5 iPhoneモデル)でクラッシュします。表現(代わりに構造体を渡し、何iPadはクラッシュしませんが、このアプリは
  • が直接memsetを呼び出すことはありません(今[FooViewController prepareShapes]

)もちろん、私の任意のデバイス上にクラッシュを再現することはできません)普遍的ではありませんシェイプ)を再割り当てしようとするクラスメソッドに追加します。スタックトレースがクラスメソッドをスキップするという事実はちょっと変わっていますが、私が理解していないコンパイラの魔法はまだまだです。次のようにクラスメソッド内で、memsetを呼び出すブロックは次のとおりです。

// class method invoked by [FooViewController prepareShapes]:808 (shape is coloured2DShape instance) 
shape->maxVertexCount = maxVertexes; 
if (shape->maxVertexBytes != 0) 
{ 
    free(shape->vertices); 
} 
shape->maxVertexBytes = sizeof(vertex_2D_4byteColour) * shape->maxVertexCount; 
shape->vertices = (vertex_2D_4byteColour *)malloc(shape->maxVertexBytes); 
memset(shape->vertices, 0, shape->maxVertexBytes); 

そして、ここでは、私は、これはOpenGLを行う際に推奨されるまでどこにも近接していないことを認識

// coloured2DShape struct 
typedef struct coloured2DShape 
{ 
    vertex_2D_4byteColour* vertices; 
    GLushort* indices; 
    uint maxVertexBytes; 
    uint maxIndexBytes; 
    int vertexCount; 
    int indexCount; 
    int maxVertexCount; 
    int maxIndexCount; 
} coloured2DShape; 

を操作される構造体ですしかし、実際に私を卑劣にするものは、memsetはiOS5の下でのみ爆発しているということです(私はQuincyKitを使用してクラッシュレポートを収集し、HockeyAppを集約しています)。この正確なコードは、iOS4(GCCでコンパイルされた)の下で数か月にわたって巡航していました。

「これは私の宿題をする」ものと解釈されないことを願っています。私は数ヶ月の研究、調整(この問題に取り組んでいるいくつかのアップデートをリリースしました)、そして進歩なしに髪を引っ張っています。私はすべてのアイデアがありません。

答えて

1

私はmemsetが問題なく動作していますが、何らかの理由でmallocへの呼び出しが失敗したと考えていました。0を返します。

+0

これは意味があります。最新のアップデートで 'malloc'の失敗のチェックを追加しました。 "memset'エラー"カウントが "malloc' fail"エラーに置き換えられるようになった場合、私はあなたに答えを与えるでしょう(1週間程度で知っておくべきです)。これがiOS5の下でのみポップアップする理由は何ですか? –

0

私はデバッグの時間後に見つけた同様のクラッシュのスウィッチを公開しようとしています。おそらく、誰かにとって役に立ちます... 理由はとてもばかげたことでした。 私はNSLogに2つのプレースホルダを持ち、実際の変数は1つしかありませんでした。

NSLog(@"lastItemDate = %@ unixtime = %@", lastItemDate);