C++ 重割矢量断层

C++ 重割矢量断层,c++,segmentation-fault,C++,Segmentation Fault,我试图保留内存并从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

我试图保留内存并从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)));
  }
试试{
图像保留(a_宽度*a_高度*4);
}
捕获(…){

std::cerr它几乎正好停在四分之一的地方。分配给
pmappedMemory
的内存太小。您可能分配了大量像素,而不是正确的元素数量(像素的四倍)


另一个选项是,pmappedbuffer实际上包含字节,而您错误地认为它是一个浮点缓冲区。您是如何获得此映射区域的,它指向什么的?

确定显然这是Intel Graphics Vulkan支持问题

治愈-按行映射内存

放在一边:这不会导致无符号字符目标溢出吗?阅读并使用最近的,可能是
g++-Wall-g
请添加
image
的定义
push_-back
不会出错。如果
reserve
成功,并且如果你的向量是
std::vector
,那么我不认为它甚至有可能失败(至少在一致的平台上)。问题很可能是
pmappedMemory[i]
。检查pmappedMemory的大小。您可能试图索引超出范围的内容。