假设存在指向浮点值数组的指针: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
数组复制到其末尾?
答案 0 :(得分:1)
memmove()
复制temporary
指向的内存的内容。该副本不依赖于原始temporary
,因此在调用memmove()
后将其删除是完全安全的。
但是首先不需要临时,你可以直接从原始阵列中复制。
addRecord(&(source[m]), sizeof source[m]);