割り当ては、10個の要素が「students」であり、それぞれがスコアとIDを持つ構造体配列を作成することです。コード内で変更が許可されていないものがいくつかあります(メインのものと同様)。構造体配列からの空きメモリ
#include <stdio.h>
#include <stdlib.h>
struct student* allocate(){
struct student* array = malloc(10 * sizeof(struct student));
return array;
}
void deallocate(struct student* stud){
int i = 0;
for(;i<10;i++)
free(&stud[i]);
}
だから、これは罰金コンパイルしたコードの残りの部分は正常に実行されますが、それは自由になったとき、その後コアダンプ()。また、これは私の教授が私に与えた主なものであり、変更しないように教えてくれました。デアロケート関数を呼び出す必要はありませんでしたので、メインが終了したときに自動的に呼び出されるのか、間違ってそれを残したのか不思議です。私はそれが合理的だと思うので、私はそれを追加しました。
int main(){
struct student* stud = allocate();
generate(stud);
output(stud);
sort(stud);
for(int i=0;i<10;i++){
printf("%d %d\n", stud[i].id,stud[i].score);
}
printf("Avg: %f \n", avg(stud));
printf("Min: %d \n", min(stud));
deallocate(stud);
return 0;
}
途中でgccをコンパイルしています。 –
あなたの質問は何ですか? – Hypino
'malloc()'への呼び出しはいくつありますか? 'free()'への呼び出しは何回ですか?なぜ数字が違うのですか?どのように違うのを止めることができますか? 'malloc()'を呼び出すたびに 'free()'が1つあるはずです。 ( 'realloc()'を使うと、計数作業にスパナを投げることができます - 空きメモリを割り当て、再割り当てできますが、コンセプトは適用されます) –