memmove函数是否与临时指针共享相同的地址?

时间:2016-11-16 22:53:35

标签: c++ arrays heap memmove

假设存在指向浮点值数组的指针:float *source;我们知道其大小为int sourcesize;

已经实现了一项功能,可以从souceinputVec数组添加元素:

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数组复制到其末尾?

1 个答案:

答案 0 :(得分:1)

memmove()复制temporary指向的内存的内容。该副本不依赖于原始temporary,因此在调用memmove()后将其删除是完全安全的。

但是首先不需要临时,你可以直接从原始阵列中复制。

addRecord(&(source[m]), sizeof source[m]);