gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:01 26 4
gpt4 key购买 nike

我有这样的功能:

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 末尾打印的内容是正确的,但调用函数后打印的内容不正确。这是为什么?

最佳答案

这是因为你在函数内部分配了output,使得传入funcFloat的数组完全无用。当 funcFloat 退出时,它仍未初始化,导致不正确的输出。

funcFloat 中删除对 output 的分配以解决此问题:

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 样式数组,而应使用 vector 。这解决了多个问题,例如您看到的问题,但也解决了数组边界不匹配的可能性(将 1000 项写入 100 项的数组)、可能的内存泄漏以及无法动态增长数组。

关于c++ - 在 C++ 中将 float 数组的参数填充为 float*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641254/

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