Моя проблема: Я хотел бы создать функцию, которая может менять любые два элемента в массиве родового типа.C - общая функция: обмен двумя элементами в массиве
У меня есть функция SwapG, которая может поменять два элемента любого типа:
void SwapG(void * a, void * b, size_t size)
{
void * temp = malloc(size);
memcpy(temp, a, size);
memcpy(a, b, size);
memcpy(b, temp, size);
}
Вот моя попытка функции, которая будет обменять два элемента в массиве любого типа:
void SwapInArrayG(void ** arr, int a, int b, size_t size)
{
void * temp = malloc(size);
memcpy(temp, *(arr + a), size);
memcpy(*(arr + a), *(arr + b), size);
memcpy(*(arr + b), temp, size);
}
I Я уверен, что я перепутал указатели, но я не могу найти решение. Буду признателен за любую помощь :).
Примечание: после завершения копирования полезно «free» (temp); ' – chux
В чем проблема с использованием простого макроса? Ваш код является приглашением к ошибкам программирования и будет очень медленным распределением/освобождением памяти для каждого свопа. – Olaf
Если вы хотите поменять местами две записи в одном массиве, почему бы вам не использовать первую функцию? 'SwapG (& array [idx1], & array [idx2], sizeof (entry))' – EOF