Предположим, есть указатель на массив значений с плавающей точкой: float *source;
и мы знаем, его размер, как int sourcesize;
Функция memmove имеет тот же адрес, что и временный указатель?
Существует уже реализована функция добавления элемента в 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
?
Этот код не имеет надежды на работу, если вы копируете 'm' floats для произвольного одиночного поплавка. Я бы настоятельно рекомендовал вам использовать контейнеры стандартной библиотеки, такие как 'std :: vector', для хранения этих данных. – tadman
'sizeof (JtFloat32)' и 'sizeof (float)' могут быть не такими же, иначе зачем 'JtFloat32'? Если они отличаются, 'float * tempor = new float; memcpy (временный, (JtFloat32 *) & (источник [m]), sizeof (JtFloat32)); 'проблема. – chux
Вам нужно 'JtFloat32 * временное = новое JtFloat32 [m]' в * абсолютном наименее *. Вы также должны изменить подпись метода на 'JtFloat32 * ', чтобы избежать кастинга. – tadman