假设有一个指向浮点值数组的指针: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数组复制到其结尾?

最佳答案

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

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

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

10-01 16:07