在C ++中将float数组的参数填充为float *

时间:2017-08-11 18:00:13

标签: c++ function pointers parameter-passing

我有这样的功能:

bool funcFloats(float* output) {
     output = new float[100];
     populateArray((float *) &(*firstArray)[0], output); //First array is an std::vector<uint8_t>
     for(int i=0; i<100; i++) {
         std::cout<<output[i]<<std::endl;
     }
}

template <typename A, typename B> void populateArray(A *in, B *out)
{
  using namespace std;
  for (unsigned y = 0; y < 100; y++)
    {
          out[y] = in[y];

    }
}

我用它来称呼它:

  float array[100];
  obj.funcFloats(array);
  for(int i=0; i<100; i++) {
    std::cout<<array[i]<<std::endl;
  }

在funcFloats末尾打印的内容是正确的,但调用该函数后打印的内容不正确。这是为什么?

1 个答案:

答案 0 :(得分:0)

这是因为你在函数内部分配output,使得传递给funcFloat的数组完全没用。当funcFloat退出时,它仍然未初始化,导致输出错误。

output移除funcFloat的作业以解决此问题:

bool funcFloats(float* output) {
     output = new float[100]; // <<== Remove this line
     populateArray((float *) &(*firstArray)[0], output);
     for(int i=0; i<100; i++) {
         std::cout<<output[i]<<std::endl;
     }
}

虽然这可以解决眼前的问题,但代码仍然不是C ++ - 惯用语。你应该尽可能远离“原始”C风格的数组,而不是使用向量。这解决了多个问题,例如您看过的问题,但也存在数组边界不匹配的可能性(将1000个项目写入100项数组),可能的内存泄漏以及无法动态增长数组。