Я следую над этим примером от Khronos для создания унифицированного буфера Raii Vulkan. Программа вылетает на линии Memcpy с ошибкой «неверного доступа». Ошибка: < /p>
Код: Выделить всё
Exception: EXC_BAD_ACCESS (code=2, address=0x1026d4000)
< /code>
Я сделал суть с минимальным воспроизводимым примером здесь. < /p>
Строки, наиболее важные для этой проблемы: < /p>
uint8_t* pData = static_cast(uniformDataMemory.mapMemory(0, memoryRequirements.size));
memcpy(pData, &mvpc, sizeof(mvpc));
uniformDataMemory.unmapMemory();
Я хочу прояснить свое понимание того, что происходит за кулисами. br />
- a vk :: raii :: buffer < /code> просто предоставляет описание того, как будет использоваться буфер и насколько он большой. Я создаю это первым, чтобы выяснить, какие требования он будет иметь для памяти графического процессора. < /Li>
GPU может иметь несколько типов памяти, которые имеют разные свойства. Мне нужно найти индекс к типу памяти графического процессора, который удовлетворяет требованиям моего буфера. Память на графическом процессоре. Память будет существовать для срока службы объекта. даст мне void*, который я могу написать несколько байтов на. Размер Параметр VK :: MemoryRequirements из моего буфера. Больше, чем размер данных, которые я копирую, поэтому MEMCPY должен быть безопасным.
Является ли какое -либо из моих предположений выше? Если нет, каковы возможные причины неверного доступа к памяти?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-vulkan