在读取文件时,通过向量分配内存很方便:
someType* readCSV() {
std::vector<someType> vec;
someType x;
...
while(fscanf(f, parser, &x) != EOF) {
vec.push_back(x);
getc(f); // skip comma
}
return &vec[0];
}
但我只想返回一个普通数组(之后我正在使用CUDA,其API使用指针)。
所以问题是在函数调用结束时vec
超出范围是否会破坏它包含的数据,如果有什么我可以保留它。
答案 0 :(得分:0)
是的,根据您的声明方式,然后向量在堆栈上分配,因此当您超出范围时,您返回的引用将变为无效。
你可以有很多解决方案:
someType *array = new someType[vec.size()]
,您将负责通过delete[] array
return vec
)答案 1 :(得分:0)
你不能在一个函数中分配内存,也不能在不需要清理它的情况下丢失内存。
您可以将函数包装到存储向量的类中。然后你就可以返回指针,数据将一直存在。
class csvReader
{
public:
csvReader (void) {}
type* readCSV (void)
{
type x;
while(fscanf(f, parser, &x) != EOF) {
vec.push_back(x);
getc(f); // skip comma
}
return vec.data();
}
private:
std::vector<type> vec;
};