memcpy导致EXC_BAD_ACCESS
我正在将别人的C ++转换为(Objective)C,但我遇到了memcpy
的问题。 我用它如下:
memcpy((void *)virtualFlash[virtualFlashAddress], data, dataLength);
变量定义如下:
unsigned char virtualFlash[5 * 1024 * 1024]; // 5MB NSUInteger virtualFlashAddress; // set to 8 later on unsigned char *data = (unsigned char *)[recordData bytes]; // recordData is an NSData object NSUInteger dataLength = [recordData length]; // same NSData object
我在memcpy的行上得到一个EXC_BAD_ACCESS。 我调试了recordData
,返回 ,dataLength返回16 – 两者都正确。
memcpy((void*)virtualFlash[8], data, 16);
这崩溃了。 我已经读过memmove
有时会工作,但不是我的情况(相同的EXC_BAD_ACCESS)。 我不确定该怎么做,因为这几乎完全是从它工作正常的C ++程序中复制而来的。 我对C的了解很少,所以我可能会遗漏一些明显的东西。
unsigned char virtualFlash[5 * 1024 * 1024]; // 5MB
您的堆栈可能足够大,也可能不足以容纳5MB的分配。 即使它是,这真的推动了一点,我会动态分配该数量。 下一个问题:
(void *)virtualFlash[virtualFlashAddress]
virtualFlash[virtualFlashAddress]
返回一个char
,不太可能是有效地址。 好像你打算写:
virtualFlash + virtualFlashAddress
其中virtualFlashAddress
是应用于基址virtualFlash
的偏移量(即,数组中第一个元素的地址)。
名称virtualFlashAddress
令人困惑,因为它被用作该数组的索引,但这是我最好的猜测而没有看到更多的代码。