Будет ли функция memmove иметь тот же адрес, что и временный указатель?

Предположим, есть указатель на массив значений с плавающей точкой: 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?

0

Решение

memmove() копирует содержание памяти, которая temporary указывает на. Эта копия не зависит от оригинала temporaryтак что это совершенно безопасно удалить его после вызова memmove(),

Но во-первых, временные данные не нужны, их можно скопировать прямо из исходного массива.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]