Восстановленный вектор Segfault - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь зарезервировать память и скопировать из памяти Vulkan

try { 
    image.reserve(a_width * a_height * 4);
  }
  catch (...) {
    std::cerr << "ERROR: " << std::endl;
  }
  std::cout << "p     ... " << (a_width * a_height) << std::endl;
  for (int i = 0; i < (a_width * a_height); i += 1)
  {
  std::cout << "q     ... " << i << std::endl;
    image.push_back((unsigned char)(255.0f * (pmappedMemory[i].r)));
    image.push_back((unsigned char)(255.0f * (pmappedMemory[i].g)));
    image.push_back((unsigned char)(255.0f * (pmappedMemory[i].b)));
    image.push_back((unsigned char)(255.0f * (pmappedMemory[i].a)));
  }

общий размер 7680000
, но останавливается на 1952768 с ошибкой сегментации (ядро сброшено)

catch didn 'ничего не поймать

Ответы [ 2 ]

3 голосов
/ 16 октября 2019

Он останавливается почти на одной четверти пути. Память, выделенная для pmappedMemory, слишком мала. Вероятно, вы выделили количество пикселей вместо правильного количества элементов (в четыре раза больше пикселей)

Другой вариант заключается в том, что pmappedbuffer на самом деле содержит байты, и вы ошибочно полагаете, что это буфер с плавающей запятой. Как вы получили эту отображенную область и на что она указывает?

0 голосов
/ 17 октября 2019

Хорошо, это проблема поддержки Intel Graphics Vulkan
Cure - сопоставить память по строкам

...