我在代码中使用 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()
操作只是定义双指针指向的数组的大小,但它不分配任何内存。它是否正确?如果是,请建议任何其他替代方案来实现相同的功能,而无需(或较少量)使用新建和删除操作。
使用保留运算符而不是 resize() 运算符解决了此问题。谢谢