-4
typedef struct
{
    char nazwisko[30];
    double srednia;
    int semestr;
}osoba;

void WyszukiwanieSemestr(osoba *stud, int sem, int i)
{
    int a;
    printf("\n");
    for(a=0;a<i;++a)
    {
       if(stud[a].semestr == sem)
       {
          printf("%d. %s %.3lf %d\n",a+1,stud[a].nazwisko,stud[a].srednia,stud[a].semestr);
       }
    }
    printf("\n");
}

そして int main() では:

osoba *os;
os = (osoba*) malloc(M*sizeof(osoba));
int sem, i = 5;
scanf("%d",sem);
WyszukiwanieSemestr(os,sem,i);

関数で std[a].semestr == sem を比較しようとすると、プログラムがクラッシュします。何が問題ですか?どうすればこれを解決できますか?

4

2 に答える 2

1

主な問題はおそらく scanf です。sem の ADDRESS を渡す必要があります。代わりに、これはキーボード入力をランダムなメモリ位置にコピーしています。

scanf("%d", &sem);

また、

os に M osoba オブジェクトを割り当てていますが、サイズ 5 を WyszukiwanieSemestr に渡しています。代わりに M を渡す必要があります。

M が 5 より小さい場合、WyszukiwanieSemestr 内の for ループで配列の最後を実行します。

WyszukiwanieSemestr(os, sem, M);

また、malloc からの応答をキャストする必要はありません。

于 2013-05-26T22:09:49.543 に答える
1
scanf("%d",sem);

する必要があります

scanf("%d", &sem);
于 2013-05-26T22:12:50.773 に答える