我將別人的C++到(目標)C,但我有與memcpy
問題。我用它如下:的memcpy導致EXC_BAD_ACCESS
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的知識非常少,所以我可能會錯過一些明顯的東西。
很可能5MB的分配'virtualFlash'堆棧失敗這是不確定的行爲。你能確認這不會發生嗎? –
不知道的Objective-C,但在C,'virtualFlash [8]'將是一個'char',如果你投的是爲'無效*',你會得到一個地址,天知道在哪裏。 Didi你的意思是'(void *)&virtualFlash [8]'也許可以複製到'virtualFlash'數組中? –
我不知道如果Objective-C的支持'virtualFlash + 8'但是這可能是在從一開始偏移開始副本的最簡單的方法。 – Wug