C ++可变长度数组(VLA)警告

时间:2014-04-11 09:20:19

标签: c++ new-operator gcc-warning nvcc

我在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   
}

现在,我有一个vector类,我使用这个方法:

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]            data = new T [numElems];

1 个答案:

答案 0 :(得分:2)

我认为你没有以正确的方式编译你的项目。

尝试使用流动的make文件。

  

CUDA_INSTALL_PATH:= / usr / local / cuda

     

CXX:= g ++   CC:= gcc   链接:= g ++ -fPIC   NVCC:= nvcc

     

#包括

     

包含= -I。 -I $(CUDA_INSTALL_PATH)/包括

     

#Common flags

     

COMMONFLAGS + = $(包括)   NVCCFLAGS + = $(共同标志)   CXXFLAGS + = $(COMMONFLAGS)   CFLAGS + = $(COMMONFLAGS)

     

LIB_CUDA:= -L $(CUDA_INSTALL_PATH)/ lib -lcudart

     

#OBJS = GpuSolver.cu.o main.cpp.o

     

OBJS = main.cu.o a.cpp.o #the your files

     

TARGET = a.out

     

LINKLINE = $(LINK)-o $(TARGET)$(OBJS)$(LIB_CUDA)

     

.SUFFIXES:.c .cpp .cu .o

     

%。c.o:%。c     $(CC)$(CFLAGS)-c $&lt; -o $ @

     

%。cu.o:%。cu     $(NVCC)$(NVCCFLAGS)-c $&lt; -o $ @

     

%。cpp.o:%。cpp     $(CXX)$(CXXFLAGS)-c $&lt; -o $ @

     

$(TARGET):$(OBJS)“makefile”#your makefile文件名     $(LINKLINE)