假设有一个指针指向一个浮点数数组:float *source;
,我们知道它的大小为int sourcesize;
有一个已经实现的函数,从inputVec
中添加一个元素到souce
数组:
void addRecord(const float* inputVec, int& sourcesize)
{
int inputVecSize = sourcesize;
memmove( (float*)&(source[inputVecSize]), inputVec, sizeof(float));
}
现在,我想从源数组的第m
个元素复制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
在这种情况下。
那么,我是否应该在最后删除temporary
?
或者,是否有更好的方法通过使用函数addRecord
将元素从source
数组复制到其末尾?
memmove()
复制temporary
指向的内存内容。该副本不依赖于原始的temporary
,因此在调用memmove()
之后删除它是完全安全的。
但是首先不需要临时数组,您可以直接从原始数组复制。
addRecord(&(source[m]), sizeof source[m]);