【发布时间】:2016-11-16 22:53:34
【问题描述】:
假设有一个指向浮点值数组的指针:float *source;,我们知道它的大小为int sourcesize;
有一个已经实现的函数,它从inputVec 向souce 数组添加一个元素:
void addRecord(const float* inputVec, int& sourcesize)
{
int inputVecSize = sourcesize;
memmove( (float*)&(source[inputVecSize]), inputVec, sizeof(float));
}
现在,我想从源数组的mth 元素中复制 1 个元素并将其附加到源端。通过使用上面的 addRecord,我实现了如下功能:
// suppose m is smaller than the current sourcesize
void copyRecord(const float* source, int& m)
{
float* temporary = new float;
memcpy( temporary, (float*)&(source[m]), sizeof(float));
addRecord(temporary, sourcesize);
delete temporary;
}
看来addRecord函数中的memmove调用可能会共享临时变量位置。因此,也许我最后不应该删除temporary。但我想也许他们不共享相同的地址,那么在这种情况下我应该删除temporary。
那么,我到底该不该删除temporary呢?
或者,有没有更好的方法通过使用函数 addRecord 将元素从 source 数组复制到其末尾?
【问题讨论】:
-
如果您将
m浮点数复制到任意单个浮点数,则此代码没有希望工作。我强烈建议您使用像std::vector这样的标准库容器来存储这些数据。 -
sizeof(JtFloat32)和sizeof(float)可能不一样 - 否则为什么会有JtFloat32?如果它们不同,float* temporary = new float; memcpy( temporary, (JtFloat32*)&(source[m]), sizeof(JtFloat32));就麻烦了。 -
您绝对最少需要
JtFloat32* temporary = new JtFloat32[m]。您还应该将方法签名更改为JtFloat32*以避免强制转换。 -
什么是
size,应该是sourcesize? -
改变了我的错误
标签: c++ arrays heap-memory memmove