c++ - 在 C/C++ 中增量动态分配内存

标签 c++ dynamic-memory-allocation

我有一个 for 循环,需要将列递增地添加到矩阵中。行的大小在进入 for 循环之前是已知的,但列的大小根据某些条件而变化。以下代码说明了这种情况:

  N = getFeatureVectorSize();
  float **fmat; // N rows, dynamic number of cols     
  for(size_t i = 0; i < getNoObjects(); i++)
  {
    if(Object[i] == TARGET_OBJECT)
    {
      float *fv = new float[N];
      getObjectFeatureVector(fv);    
      // How to add fv to fmat?
    }
  }

编辑 1 这就是我临时解决问题的方法:

  N = getFeatureVectorSize();
  float *fv = new float[N];
  float *fmat = NULL;
  int col_counter = 0;
  for(size_t i = 0; i < getNoObjects(); i++)
  {
    if(Object[i] == TARGET_OBJECT)
    {
      getObjectFeatureVector(fv);    
      fmat = (float *) realloc(fmat, (col_counter+1)*N*sizeof(float));
      for(int r=0; r<N; r++) fmat[col_counter*N+r] = fv[r];
      col_counter++;
    }
  }
  delete [] fv;
  free(fmat);

但是,我仍在寻找一种在 C/C++ 中增量分配二维数组内存的方法。

最佳答案

回答你原来的问题

// How to add fv to fmat?

当您使用 float **fmat 时,您声明了一个指向[指针数组]的指针。因此,您必须先分配(并释放!)该数组,然后才能使用它。将其视为行指针持有者:

float **fmat = new float*[N];

然后在你的循环中你只需做

fmat[i] = fv;

但是我建议您看看 std::vector 方法,因为它不会显着变慢,并且会让您免于所有那些 newdelete

关于c++ - 在 C/C++ 中增量动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811387/

相关文章:

c++ - X11:获取伪造的窗口大小和位置

c++ - 没有匹配的成员函数调用 "insert"std::unordered_map

java - 关于在java中创建动态数组

c++ - c++中分配器和内置数组的区别?

c - 错误免费(): Invalid next size (fast)

具有 CUDA 内核动态数据的 C 结构?

c++ - 执行几个小时后程序崩溃

c++ - Boost Threads 生产者/消费者意外行为

具有类似 friend 访问权限的 C++ 概念

C++ 析构函数泄漏动态内存