I\'m trying to create my own swap function but I have troubles.
Why I\'m getting \" dereferencing void pointer \" ?
void ft_swap(void *a, void *b, size
Look your statement
cur_a = (unsigned char *)*a + i; // here
if a
is a pointer to void (void *a
) then *a = void
. Then the subexpression (unsigned char *)*a
means that you want to cast void
to a pointer to char.
But void
means 'inexistent type' in C, from this the error.
You may ask why a pointer to void make sense instead, it makes sense because it is an address, that is a valid data type in C. You can use the address for all the operations that doesn't involve the pointed type. I.e. assigning the address to a pointer to whichever type of data, and the reverse, is legal. It's is illegal an expression like a[2]
where the subscript operator []
need the size of the data pointed to compute the address where to retrieve the value. Of course void
, as bogus type, have no size (same way as it miss many other properties).
Said that I would conclude that it was just an error in your code, and that what you really want to do is:
void ft_swap(void *a, void *b, size_t nbytes)
{
unsigned char cur_a; //value not pointers
unsigned char cur_b;
size_t i;
i = 0;
while (i < nbytes)
{
cur_a = *((unsigned char *)a + i); // here
cur_b = *((unsigned char *)b + i); // here
*a = cur_b;
*b = cur_a;
i++;
}
}