この関数は、 内の他のすべてのポインタの平均よりも下にある内のポインタを変数にpba
割り当てる必要があります。pointers
arr
arr
これは宿題です - これを実装することに問題はありませんが、物事が完全に自明ではないように感じます 私の質問は
- 関数の外側ではなく関数の内側にメモリを割り当てるにはどうすればよいですか?
- 私の割り当ては大丈夫ですか?
malloc
行を変更しpointers = (int **)malloc(sizeof(int*)*2);
ても機能するが機能しないことに気付いたpointers = (int **)malloc(sizeof(int*));
ので、最初にサイズを理解するのに問題があると思います
私はそれをデバッグしましたが、関数を離れるとメモリに到達できないようです。これはヒープメモリ内にあるため、意味がありません。
void main() {
int arrSize = 6;
int arr[6] = {8,4,2,9,5,4};
int **pointers;
int resSize, i;
pointers = (int **)malloc(sizeof(int*)*arrSize);
pba(arr, 6, pointers, &resSize);
for (i = 0 ; i < resSize ; i++) {
printf("%d,",*(*pointers + i));
}
printf("\n\n");
}
void pba(int* arr, unsigned int size, int ** pointers, int * resSize) {
int i,j = 0,sum = 0;
double avg;
*resSize = 0;
for (i = 0 ; i < size ; i++)
sum += arr[i];
avg = sum/(double)size;
for (i = 0 ; i < size ; i++) {
if (arr[i] < avg)
pointers[(*resSize)++] = &arr[i];
}
}