在 C++ 代码中用指针向量替换双指针变量时面临问题

问题描述 投票:0回答:1

我在代码中使用 C++ 11 标准。我已经使用双指针变量有一段时间了,现在我想用指针向量替换它。更换后,我收到分段错误错误,我尝试调试多次。但是,我无法找出确切的问题。

初始代码:

std::uint8_t** m_outputBuffersDevice{nullptr};
m_outputBuffersDevice = new std::uint8_t* [numOutputBuffers];
for (size_t i = 0; i < numOutputBuffers; i++)
{
  len = **CONSTANT_VALUE**;
  cudaMalloc((void**)&m_outputBuffersDevice[i], len * sizeof(std::uint32_t));
}

更换代码:

std::vector<std::uint8_t*> m_outputBuffersDevice{nullptr};
m_outputBuffersDevice.resize(numOutputBuffers)
for (size_t i = 0; i < numOutputBuffers; i++)
{
  len = **CONSTANT_VALUE**;
  cudaMalloc((void**)&m_outputBuffersDevice[i], len * sizeof(std::uint32_t));
}

在两个版本中,

numOutputBuffers
是相同的常量变量。我使用以下语句释放分配的内存。

初始代码:

for (size_t i{0}; i < numOutputBuffers; ++i){
   cudaFree(m_outputBuffersDevice[i]);
}
delete[] m_outputBuffersDevice;

更换代码:

for (size_t i{0}; i < numOutputBuffers; ++i){
   cudaFree(m_outputBuffersDevice[i]);
}

我不想在我的代码中使用更多数量的新建和删除操作,因为它不符合 C++11 标准。据我了解,

resize()
操作只是定义双指针指向的数组的大小,但它不分配任何内存。它是否正确?如果是,请建议任何其他替代方案来实现相同的功能,而无需(或较少量)使用新建和删除操作。

c++11 pointers cuda gpu void-pointers
1个回答
0
投票

使用保留运算符而不是 resize() 运算符解决了此问题。谢谢

© www.soinside.com 2019 - 2024. All rights reserved.