使用带数组的指针时遇到麻烦

时间:2013-04-15 11:49:32

标签: c pointers malloc

我是C的新手并且指针存在问题。我一直无法在网上或通过我的同行找到答案,所以我在这里。

我被赋予了一项任务:

  • 创建一个包含20个随机整数的数组
  • 打印出整数
  • 按升序对数组进行排序
  • 再打印出来

当我使用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**â

2 个答案:

答案 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)

arrayint*,您的sort函数期待int*,但是您传递&array,int指针的地址