0

私は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: 警告: 関数 ârand の暗黙の宣言

Q3.c:46: 警告: 互換性のないポインター型から「sort」の引数 1 を渡しています

Q3.c:9: 注: 予想される âint *â ですが、引数の型は âint **â です

4

2 に答える 2

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));

20 のスペースではなく、へのnポインターに十分なスペースを割り当てます。そうあるべきintint

int *array = malloc(n * sizeof *array);

コンパイラの警告/エラーに関しては、

#include <stdlib.h>

そして電話する

sort(array, 20);

渡す代わりに&array

于 2013-04-15T11:53:30.743 に答える
0

arrayint*あなたのsort関数は を期待していますが、 int ポインターのアドレスint*を渡します&array

于 2013-04-15T11:54:20.793 に答える