【发布时间】:2014-04-11 09:20:19
【问题描述】:
我在 SO 上阅读了有关 VLA 的不同答案,但找不到答案。就我而言,我有一个分配内存的函数:
template<typename T>
void allocMemory(T *&data, const size_t numElems)
{
#ifdef PINNED_MEMORY
// allocate pinned memory
#else
data = new T[numElems];
#endif
}
现在,我有一个使用此方法的向量类:
template<typename T>
class MyVec
{
T *data;
size_t size;
public:
MyVec(size_t _size): size(_size)
{ allocMemory<T>(data, size); } // gives VLA warning
};
当我使用 nvcc (V0.2.1221) 编译器编译它时会发生这种情况,我猜它在下面使用 gcc 编译器(?)实际警告是:
myvec.h:16:6: 警告:ISO C++ 不支持可变长度数组类型 [-Wvla] 数据 = 新 T[numElems];
【问题讨论】:
-
你试过
allocMemory<T>(data, size)吗? -
您收到的实际错误信息是什么?
-
@Marius 哎呀。是的,它是源代码中的 allocMemory
(data, size)。 -
a
new T[num]根本不是可变长度数组。如果你有int i; int j[i];,你称之为VLA。 -
如果这是使用 NVCC 编译的,请确保错误不在其他地方,或者您在某处有一个 CUDACC 宏,以便您真正编译其他部分coe
标签: c++ new-operator gcc-warning nvcc