假设有一个指向浮点值数组的指针:float *source;
,我们知道它的大小为int sourcesize;
有一个已经实现的功能,可以从souce
向inputVec
数组添加元素:
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;
}
似乎
memmove
函数中的addRecord
调用可能共享临时变量的位置。因此,也许我不应该最后删除temporary
。但是我认为也许他们不共享相同的地址,那么在这种情况下,我应该删除temporary
。那么,是否应该最后删除
temporary
?或者,是否有更好的方法通过使用功能
source
将元素从addRecord
数组复制到其结尾? 最佳答案
memmove()
复制temporary
指向的内存的内容。该副本不依赖于原始的temporary
,因此在调用memmove()
之后将其删除是绝对安全的。
但是首先不需要临时文件,您可以直接从原始数组中进行复制。
addRecord(&(source[m]), sizeof source[m]);