将memmove函数与临时指针共享相同的地址



假设有一个指针指向一个浮点数数组: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]);

最新更新