我有这样的功能:
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末尾打印的内容是正确的,但调用该函数后打印的内容不正确。这是为什么?
答案 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项数组),可能的内存泄漏以及无法动态增长数组。