memcpy导致EXC_BAD_ACCESS

时间:2012-10-08 20:11:42

标签: objective-c c memcpy

我正在将别人的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,返回<d8ffbd27 2000b1af 1c00b0af 2400bfaf>,dataLength返回16 - 都正确。

memcpy((void*)virtualFlash[8], data, 16);

这次崩溃。我已经读过memmove有时会工作,但不是我的情况(同样的EXC_BAD_ACCESS)。我不确定该怎么做,因为这几乎完全是从它工作正常的C ++程序中复制而来的。我对C的了解很少,所以我可能会遗漏一些明显的东西。

1 个答案:

答案 0 :(得分:3)

unsigned char virtualFlash[5 * 1024 * 1024]; // 5MB

您的堆栈可能会或可能不会大到足以容纳5MB的分配。即使它是,这真的推动了一点,我会动态分配该数量。 下一个问题:

(void *)virtualFlash[virtualFlashAddress]

virtualFlash[virtualFlashAddress]返回char,不太可能是有效地址。好像你打算写:

virtualFlash + virtualFlashAddress

其中virtualFlashAddress是应用于基址virtualFlash的偏移量(即数组中第一个元素的地址)。

名称virtualFlashAddress令人困惑,因为它被用作该数组的索引,但这是我最好的猜测而没有看到更多的代码。

相关问题