我是C的新手并且指针存在问题。我一直无法在网上或通过我的同行找到答案,所以我在这里。
我被赋予了一项任务:
当我使用GCC编译程序并运行时,我遇到了分段错误。当我尝试在number[i]
函数中设置number[k]
或sort
的值时,我已经缩小了范围。任何帮助将不胜感激。
#include <stdio.h>
void sort(int* number, int n){
/*Sort the given array number , of length n*/
int temp, min;
int i, k;
for(i=0; i<n; i++){
min = i;
for(k=i+1; k<n; k++){
if(number[k]<min){
min = k;
}
}
temp = number[i];
number[i] = number[k];
number[k] = temp;
}
}
int main(){
/*Declare an integer n and assign it a value of 20.*/
int n=20;
/*Allocate memory for an array of n integers using malloc.*/
int *array = malloc(n * sizeof(array));
/*Fill this array with random numbers, using rand().*/
srand(time(NULL));
int i;
for(i=0; i<n; i++){
array[i] = rand()%1000+1;
}
/*Print the contents of the array.*/
for(i=0; i<n; i++){
printf("%d\n", array[i]);
}
/*Pass this array along with n to the sort() function of part a.*/
sort(&array, 20);
/*Print the contents of the array.*/
printf("\n");
for(i=0; i<n; i++){
printf("%d\n", array[i]);
}
return 0;
}
以下是我得到的编译错误:
Q3.c:在函数âmainâ:
Q3.c:31:警告:隐式声明函数âmallocâ
Q3.c:31:警告:内置的不兼容的隐式声明 功能âmallocâ
Q3.c:34:警告:隐式声明函数âsrandâ
Q3.c:34:警告:隐式声明函数âtimeâ
Q3.c:37:警告:隐式声明函数â€
Q3.c:46:警告:传递âsortâ的参数1不兼容 指针类型
Q3.c:9:注意:预期âint*â,但参数类型为âint**â
答案 0 :(得分:2)
在你交换元素的时候,
temp = number[i];
number[i] = number[k];
number[k] = temp;
k == n
因为它是在
for(k=i+1; k<n; k++){
您打算在交换中使用min
而不是k
。
在main
,
int *array = malloc(n * sizeof(array));
为n
的{{1}}指针分配足够的空间,而不是20 int
的空间。那应该是
int
关于编译器警告/错误,
int *array = malloc(n * sizeof *array);
并致电
#include <stdlib.h>
而不是传递sort(array, 20);
。
答案 1 :(得分:0)
array
是int*
,您的sort
函数期待int*
,但是您传递&array
,int指针的地址