problema memset 'CortexA8' sotto iOS5
-
25-10-2019 - |
Domanda
Dato che iOS5 colpito le strade che ho iniziato ho ricevuto molti (tanti) i rapporti schianto come:
...
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)
...
dettagli rilevanti:
- XCode 4.2
- LLVM 3.0
- 'ARMv6 ARMv7' architetture
- iOS 5 SDK di base
- mira iOS 4.0
- si blocca sotto solo iOS5 (tutti i modelli di iPhone iOS5. Nessun iPad si blocca, ma app non è universale)
- Non è possibile riprodurre l'incidente su uno dei miei dispositivi (ovviamente)
Ora [FooViewController prepareShapes]
non chiama direttamente memset
, passa invece una struct (che rappresenta una forma) per un metodo di classe che i tentativi di realloc esso. Il fatto che i cassonetti della traccia dello stack sopra il metodo di classe è un po 'strano, ma senza dubbio è magia ancora più compilatore non capisco. All'interno del metodo di classe, il blocco che richiama memset
è la seguente:
// 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);
Ed ecco la struct manipolato
// coloured2DShape struct
typedef struct coloured2DShape
{
vertex_2D_4byteColour* vertices;
GLushort* indices;
uint maxVertexBytes;
uint maxIndexBytes;
int vertexCount;
int indexCount;
int maxVertexCount;
int maxIndexCount;
} coloured2DShape;
Mi rendo conto che questo non è da nessuna parte vicino al modo consigliato di fare OpenGL, tuttavia la cosa che veramente mi bamboozles (e io sono veramente bene e ingannati qui) è che memset
è solo soffia sotto iOS5 (io sono utilizzando QuincyKit per raccogliere segnalazioni di crash e HockeyApp per aggregare loro). Questo codice esatto era stato crociera lungo sotto iOS4 (compilato con GCC) per mesi.
Spero che questo non sia interpretato come una cosa 'fare i compiti'. Ho trascorso mesi alla ricerca, tweaking (ho pubblicato diversi aggiornamenti che affrontano questo problema) e tirate di capelli con alcun progresso. Sono tutti fuori di idee.
Soluzione
I'd think that memset
is working fine, but the call to malloc
failed for some reason, returning 0
.
Altri suggerimenti
I'm gonna publish the soution of similar crash I found after hour of debugging, maybe it would be useful for somebody... The reason was in so stupid thing. I had two placeholders in NSLog and only one real variable.
NSLog(@"lastItemDate = %@ unixtime = %@", lastItemDate);