gpt4 book ai didi

c - 关于C中动态内存分配的问题

转载 作者:太空狗 更新时间:2023-10-29 15:35:54 26 4
gpt4 key购买 nike

  1. 有什么区别

    int size;
    int *arr;
    scanf("%i", &size);
    arr = malloc(size * sizeof(*arr));

    int size;
    scanf("%i", &size);
    int arr[size];
  2. 当我想为 2 个大数字分配内存时,我会使用以下代码:

        unsigned long *big_nums;
    big_nums = malloc(2 * sizeof(*big_nums));

    我会使用 big_nums[0] 和第二个访问第一个大笨蛋 一个带有 big_nums[1]。假设 unsigned long 是 4 个字节大, 那么代码将分配 2 * 4 = 8 个字节。比方说我做 像这样:

        unsigned long *big_nums;
    big_nums = malloc(7);

使用 big_nums[0] 对我来说很清楚,但是 big_nums[1] 呢?将要 它会导致某种段错误或什么?

最佳答案

有两个地方可以获取内存:栈和堆。栈是分配短期事物的地方,堆是分配长期事物的地方。

malloc() 从堆中分配,int arr[size] 从堆栈中分配。

当您的函数退出时,arr[size] 将被自动处理,但 malloc() 不会。这会导致所谓的“内存泄漏”。

big_nums = malloc(7);

如果你访问 big_nums[1] 确实会出错。一般来说,该标准表示行为是“未定义的”,这意味着它可能有效,也可能无效。

关于c - 关于C中动态内存分配的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com