如何正确分配内存?

问题描述 投票:0回答:1

因此,我正在学习并尝试在这段代码中找出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;
}
c memory memory-management
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.