我不明白为什么在调用排序函数后对原始数组进行排序,即使我使用了备用数组。 我首先复制了所有元素以避免这个问题。 任何澄清都是受欢迎的。谢谢。
#include <stdio.h>
void array_sort(int* t, int n)
{
int min, index;
int* p;
for (int i = 0; i < n; i++) { //to avoid changing the original array
*(p + i) = *(t + i);
}
for (int i = 0; i < n - 1; i++) {
min = *(p + i);
index = i;
for (int j = i + 1; j < n; j++) {
if (*(p + j) < min) {
min = *(p + j);
index = j;
}
}
*(p + index) = *(p + i);
*(p + i) = min;
}
for (int i = 0; i < n; i++)
printf("%i\t", *(p + i));
}
int main(void)
{
printf("Enter number of elements to be sorted : ");
int n;
scanf("%i", &n);
printf("\nEnter the numbers : ");
int p[n];
for (int i = 0; i < n; i++) {
scanf("%i", p + i);
}
array_sort(p, n);
printf("\n");
for (int i = 0; i < n; i++) { //check if original array is unsorted
printf("%i\t", *(p + i));
}
return 0;
}
答案 0 :(得分:0)
程序的行为将产生未定义的行为。原因是在array_sort函数中使用了未初始化的指针p。 array_sort函数会将数组复制到某个随机存储器中,因为指针p未初始化。
这个程序通常会导致分段错误。