函数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];
}
}
答案 0 :(得分:0)
实际上,您正在一个函数内部分配堆内存,该函数称为main
。您可以在pba
函数内部进行分配,但必须返回已分配的值。或者作为返回值,可以使用int**
,或者作为函数参数。但在这种情况下,您需要将指针传递给int**
而不仅仅是int**
。如果不再需要数组,请不要忘记使用free()
解除分配!
答案 1 :(得分:0)
只需使用堆分配和指向指针类型的指针...
void main() {
...
pba(arr, 6, &pointers, &resSize);
...
free(pointers);
}
void pba(int* arr, unsigned int size, int ***pointers, int * resSize) {
...
*pointers = malloc(sizeof(*pointers)*size);
avg = sum/(double)size;
for (i = 0 ; i < size ; i++) {
if (arr[i] < avg)
(*pointers)[(*resSize)++] = &arr[i];
}
}