Я столкнулся со странным EXC_BAD_ACCESS при попытке использовать std :: memcpy для копирования группы байтов.
У меня есть std :: string, содержащая данные из PNG-файла .Я использую следующую структуру для представления фрагмента PNG:
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);
Когда я выводю тип / длину чанка, я ясно вижу, что они правильныечитать, но когда я пытаюсь получить доступ к данным, я сталкиваюсь с вышеуказанной ошибкой.Понятия не имею, почему, поскольку у меня достаточно большого буфера для хранения данных чанка.
У кого-нибудь есть идея?
Заранее спасибо