gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:57 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com