因此,我正在学习并尝试在这段代码中找出c中的内存分配,是正确分配了内存还是否?我是否也需要分配数组,还是因为用户输入的所有内容都将分配到数组(将存储在数组中)而已经分配了数组?
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int arr[20];
int b;
int *ptr;
ptr = &b;
ptr = (int*) malloc(20 *sizeof(int));
//find largest element in array
printf("Enter the number of elements: ");
scanf("%d", &b);
if(ptr == NULL)
{
printf(" No memory allocated.");
exit(0);
}
for (i = 0; i < b; ++i) {
printf("Enter number%d: ", i + 1);
scanf("%d", &arr[i]);
}
for (i = 1; i < b; ++i) {
if (arr[0] < arr[i])
arr[0] = arr[i];
}
free(ptr);
printf("Largest element = %d", arr[0]);
return 0;
}
您可以清理malloc
呼叫:
ptr = malloc( 20 * sizeof *ptr );
除非您使用ancient C89之前的实现或C ++,否则无需强制转换malloc
的结果(在这种情况下,应使用new/delete
代替malloc/free
,或更可取的是容器类型,例如vector
)。
在这种情况下,[sizeof *ptr
等效于sizeof (int)
。
但是,您实际上并没有使用该内存-您分配了它并释放了它,但是从不写任何东西。
您最初将&b
分配给ptr
,但是随后您用malloc
调用的结果覆盖了它,因此,如果您希望以某种方式将内存附加到b
,请注意,它不是't。