我在C中遇到了这个问题:
实施
void arr_mix_x(void *arr, int n, size_t size);
功能。该功能将混合元素。它将通过以下方式实现:
- 将数组的下半部分放在数组的偶数索引中。
- 将数组的较高一半放在数组的奇数索引中,反转。
- 执行此操作后,将所有元素移动到循环中。
醇>
我成功完成了问题的第一部分,这是相同的,但只处理int
数组。但是,当我尝试运行它时,我编写的代码(或从问题的第一部分改写)给我一个分段错误。这是代码:
void arr_mix_x(void *arr, int n, size_t size)
{
int i, j;
void *tmpArr = malloc(size);
void *tmp = NULL;
memcpy(tmpArr, arr, size);
for (i = 0, j = n-1; i < n/2; i++, j--)
{
memcpy(arr+(i*2), tmpArr+i, size/n);
memcpy(arr+((i*2)+1), tmpArr+j, size/n);
}
memcpy(tmp, arr, size/n);
for (i = 0; i < n-1; i++)
{
memcpy(arr+i, arr+i+1, size/n);
}
memcpy(arr+n-1, tmp, size/n);
free(tmpArr);
tmpArr = NULL;
}
这是数组和对函数的调用:
int arr[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
arr_mix_x(arr, 10, sizeof(int) * 10);
答案 0 :(得分:0)
好的,所以我显然在代码本身有一些错误。我改变了它现在正在工作。这是代码,如果它可以帮助任何人有类似的问题:
void arr_mix_x(void *arr, int n, size_t size)
{
int i, j;
void *tmpArr = malloc(size * n);
void *tmp = malloc(size);
memcpy(tmpArr, arr, size * n);
for (i = 0, j = n-1; i < n/2; i++, j--)
{
memcpy(arr+(i*2*size), tmpArr+(i*size), size);
memcpy(arr+((i*2+1)*size), tmpArr+(j*size), size);
}
memcpy(tmp, arr, size);
for (i = 0; i < n-1; i++)
{
memcpy(arr+(i*size), arr+((i+1)*size), size);
}
memcpy(arr+((n-1)*size), tmp, size);
free(tmpArr);
tmpArr = NULL;
free(tmp);
tmp = NULL;
}
函数调用:
arr_mix_x(arr, 10, sizeof(int));