EXC_BAD_ACCESS 正在将内存复制到结构
EXC_BAD_ACCESS while copying memory to structure
我在尝试使用 std::memcpy 复制一堆字节时遇到了一个奇怪的问题 EXC_BAD_ACCESS。
我有一个 std::string 包含来自 PNG file 的数据。我使用以下结构来表示 PNG Chunk:
struct PngChunk
{
int length;
char type[4]; // IHDR, PLTE, IDAT, IEND, ...
unsigned char* data;
unsigned int crc;
} typedef PngChunk;
我正在按以下方式逐块阅读它:
首先我读了长度和类型:
std::memcpy((void*) &chunk, ptr, sizeof(unsigned int) + (sizeof(char) * 4));
ptr += sizeof(unsigned int) + (sizeof(char) * 4); // advance pointer to data
我将读取长度字节交换为小端字节序(需要,因为存储在大端字节序中)。然后我像这样读取块数据:
chunk.data = new unsigned char[chunk.length];
std::memcpy((void*) &chunk.data, ptr, chunk.length);
ptr += chunk.length; // advance pointer to CRC
最后我读取了块 CRC
std::memcpy((void*) &chunk.crc, ptr, sizeof(unsigned int));
ptr += sizeof(unsigned int);
当我输出块 type/length 时,我可以清楚地看到它们被正确读取,但是当我尝试访问数据时,我遇到了上述错误。我不知道为什么因为我的缓冲区足够大来存储块数据。
有人有想法吗?
提前致谢
我认为问题源于您在以下代码行中获取了 data
变量的地址。
std::memcpy((void*) &chunk.data, ptr, chunk.length);
由于您需要的是变量指向的地址,因此您必须在 chunk.data
之前删除 &
。
我在尝试使用 std::memcpy 复制一堆字节时遇到了一个奇怪的问题 EXC_BAD_ACCESS。
我有一个 std::string 包含来自 PNG file 的数据。我使用以下结构来表示 PNG Chunk:
struct PngChunk
{
int length;
char type[4]; // IHDR, PLTE, IDAT, IEND, ...
unsigned char* data;
unsigned int crc;
} typedef PngChunk;
我正在按以下方式逐块阅读它:
首先我读了长度和类型:
std::memcpy((void*) &chunk, ptr, sizeof(unsigned int) + (sizeof(char) * 4));
ptr += sizeof(unsigned int) + (sizeof(char) * 4); // advance pointer to data
我将读取长度字节交换为小端字节序(需要,因为存储在大端字节序中)。然后我像这样读取块数据:
chunk.data = new unsigned char[chunk.length];
std::memcpy((void*) &chunk.data, ptr, chunk.length);
ptr += chunk.length; // advance pointer to CRC
最后我读取了块 CRC
std::memcpy((void*) &chunk.crc, ptr, sizeof(unsigned int));
ptr += sizeof(unsigned int);
当我输出块 type/length 时,我可以清楚地看到它们被正确读取,但是当我尝试访问数据时,我遇到了上述错误。我不知道为什么因为我的缓冲区足够大来存储块数据。
有人有想法吗?
提前致谢
我认为问题源于您在以下代码行中获取了 data
变量的地址。
std::memcpy((void*) &chunk.data, ptr, chunk.length);
由于您需要的是变量指向的地址,因此您必须在 chunk.data
之前删除 &
。