0

ファイルを読み込むときは、ベクターを介してメモリを割り当てると便利です。

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];
}

しかし、私は通常の配列を返したいだけです(その後、APIがポインターを使用するCUDAを使用しています)。

したがって、問題はvec、関数呼び出しの最後にスコープ外に出ると、そこに含まれるデータが破棄されるかどうか、そして何かできることがあればそれを保存するかどうかです。

4

2 に答える 2

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;
};
于 2013-05-12T03:48:18.863 に答える