c++ - 将内存复制到结构时出现 EXC_BAD_ACCESS

标签 c++ macos memcpy

我在尝试使用 std::memcpy 复制字节串时遇到了一个奇怪的 EXC_BAD_ACCESS。

我有一个 std::string 包含来自 PNG file 的数据.我使用以下结构来表示 PNG block :

struct PngChunk
{
    int length;
    char type[4]; // IHDR, PLTE, IDAT, IEND, ...
    unsigned char* data;
    unsigned int crc;

} typedef PngChunk;

我正在按以下方式逐 block 阅读它:

首先我读了长度和类型:

std::memcpy((void*) &chunk, ptr, sizeof(unsigned int) + (sizeof(char) * 4));
ptr += sizeof(unsigned int) + (sizeof(char) * 4); // advance pointer to data

我将读取长度字节交换为小端字节序(需要,因为存储在大端字节序中)。然后我像这样读取 block 数据:

chunk.data = new unsigned char[chunk.length];
std::memcpy((void*) &chunk.data, ptr, chunk.length);
ptr += chunk.length; // advance pointer to CRC

最后我读到了 block CRC

std::memcpy((void*) &chunk.crc, ptr, sizeof(unsigned int));
ptr += sizeof(unsigned int);

当我输出 block 类型/长度时,我可以清楚地看到它们被正确读取,但是当我尝试访问数据时,我遇到了上述错误。我不知道为什么我的缓冲区足够大以存储 block 数据。

有人有想法吗?

提前致谢

最佳答案

我认为问题源于您在以下代码行中获取了 data 变量的地址。

std::memcpy((void*) &chunk.data, ptr, chunk.length);

因为您需要的是变量指向的地址,所以您必须在 chunk.data 之前删除 &

关于c++ - 将内存复制到结构时出现 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003576/

相关文章:

c++ - "dynamical storage"与 memcpy

c - 从特定索引 C 读取 char*

c++ - QT打印质量低

c++ - POSIX 线程在 C 中没有产生加速

iphone - 适用于 iOS 和 Mac OS X 的跨平台方法是什么?

c - 使用 memcpy 填充结构

c++ - 无法将整数值硬编码到 vector 中

C++ 写入 csv,性能

OSX 上的 Python3 到 MySQL 连接 ...ImportError : Reason: Image not found

macos - 如何在 mac 中通过 cli 设置默认钥匙串(keychain)?