Предположим, есть указатель на массив значений с плавающей точкой: float *source;
и мы знаем его размер как int sourcesize;
Существует уже реализованная функция, которая добавляет элемент к souce
массив из inputVec
:
void addRecord(const float* inputVec, int& sourcesize)
{
int inputVecSize = sourcesize;
memmove( (float*)&(source[inputVecSize]), inputVec, sizeof(float));
}
Теперь я хочу скопировать 1 элемент из m
й элемент исходного массива и присоедините его к исходному концу. Используя описанную выше 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]);
Других решений пока нет …