请解释一下崩溃的原因。我的第 3 方代码意外崩溃并出现 EXC_BAD_ACCESS
static int overwrite_selector(struct srm_target *srm, MARFileRemoverProgressBlock progressBlock)
{
srm->buffer = (unsigned char *)alloca(srm->buffer_size);
if(overwrite_byte(srm, 1, 0xF6, progressBlock) < 0) return -1;
return 0;
}
static int overwrite_byte(struct srm_target *srm, const int pass, const int byte, MARFileRemoverProgressBlock progressBlock)
{
memset(srm->buffer, byte, srm->buffer_size);
return overwrite(srm, pass, progressBlock);
}
崩溃发生在 memset(srm->buffer, byte, srm->buffer_size); 线上因此,srm->buffer 的内存分配似乎存在问题。但如果我将 alloca 替换为 malloc 那么一切都可以(不会崩溃)。
我在启用 ARC 的 osx 10.9 上进行开发
我注意到苹果特有的一点:如果我在全局队列中运行代码,但如果在主队列上运行,则一切正常,就会发生崩溃。