gpt4 book ai didi

c++ - memmove 函数会与临时指针共享相同的地址吗?

转载 作者:行者123 更新时间:2023-11-28 05:25:27 27 4
gpt4 key购买 nike

假设有一个指向浮点值数组的指针: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呢?

或者,是否有更好的方法通过使用函数 addRecord 将元素从 source 数组复制到它的末尾?

最佳答案

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

但是一开始就不需要temporary,直接从原数组copy即可。

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

关于c++ - memmove 函数会与临时指针共享相同的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com