memset';CortexA8&x27;根据iOS5发行

memset';CortexA8&x27;根据iOS5发行,ios5,crash-reports,memset,plcrashreporter,llvm-3.0,Ios5,Crash Reports,Memset,Plcrashreporter,Llvm 3.0,自从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 -[FooViewContro

自从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
  • LLVM3.0
  • “armv6 armv7”体系结构
  • iOS5基本SDK
  • 以iOS 4.0为目标
  • 仅在iOS5下崩溃(所有iOS5 iPhone机型。没有iPad崩溃,但应用程序不是通用的)
  • 无法在我的任何设备上重现崩溃(当然)
现在
[FooViewController prepareShapes]
不直接调用
memset
,而是将结构(表示形状)传递给试图重新定位它的类方法。堆栈跟踪跳过类方法的事实有点奇怪,但毫无疑问,这更像是编译器的魔力,我不明白。在类方法中,调用
memset
的块如下所示:

//由[FooViewController prepareShapes]:808调用的类方法(形状是彩色的2DShape实例)
形状->最大顶点计数=最大顶点;
如果(形状->maxVertexBytes!=0)
{
自由(形状->顶点);
}
形状->maxVertexBytes=sizeof(顶点2D字节颜色)*形状->maxVertexCount;
形状->顶点=(顶点\u 2D\u 4byteColor*)malloc(形状->最大顶点字节);
memset(形状->顶点,0,形状->最大顶点字节);
这是正在操纵的结构

//彩色2dshape结构
typedef结构着色2dshape
{
顶点2D字节颜色*顶点;
短*指数;
uint maxVertexBytes;
uint最大索引字节;
int vertexCount;
int indexCount;
int maxVertexCount;
int maxIndexCount;
}彩色二维图形;
我认识到这与OpenGL的推荐方法相差甚远,但真正让我迷惑的是
memset
只在iOS5下爆炸(我用它来收集崩溃报告并汇总它们)。这段代码在iOS4(使用GCC编译)下运行了几个月


我希望这不会被理解为“做我的家庭作业”的事情。我花了几个月的时间进行研究、调整(我发布了几个更新来解决这个问题)和拔头发,但没有任何进展。我完全没有主意。

我认为
memset
工作正常,但是调用
malloc
失败了,因为某种原因,返回
0

我将发布一个小时调试后发现的类似崩溃的原因,也许它对某些人有用。。。 原因就在这么愚蠢的事情上。 我在NSLog中有两个占位符,只有一个实变量

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

这是有道理的。我在最新更新中添加了针对
malloc
故障的附加检查。如果“
memset
error”计数下降为“
malloc
fail”错误,我会给你答案(大约一周后就会知道)。你知道为什么这只会在iOS5下出现吗?