0

假设有一个指向浮点值数组的指针:float *source;我们知道它的大小为int sourcesize;

有一个已经实现的函数,它souce从以下位置向数组添加一个元素inputVec

void addRecord(const float* inputVec, int& sourcesize)
{
   int inputVecSize = sourcesize;
   memmove( (float*)&(source[inputVecSize]), inputVec, sizeof(float));
}

现在,我想从m源数组的第 th 个元素中复制 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

4

1 回答 1

1

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

但是首先不需要临时,您可以直接从原始数组中复制。

addRecord(&(source[m]), sizeof source[m]);
于 2016-11-16T23:05:40.253 回答