加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在运行时提供数组大小与动态内存分配之间的区别

发布时间:2020-12-16 07:18:06 所属栏目:百科 来源:网络整理
导读:参见英文答案 What’s the difference between a VLA and dynamic memory allocation via malloc?????????????????????????????????????4个 在下面的代码中,我在运行时提供了数组大小. #include stdio.hint main(){ int i; scanf("%d",i); int a[i];} 请告诉
参见英文答案 > What’s the difference between a VLA and dynamic memory allocation via malloc?????????????????????????????????????4个
在下面的代码中,我在运行时提供了数组大小.

#include <stdio.h>

int main()
{
    int i;
    scanf("%d",&i);
    int a[i];
}

请告诉我上面的代码和使用malloc()的代码之间的区别.
我知道数组存储在堆栈上,动态内存(malloc,calloc等)在堆上.
那么我的代码功能与malloc类似吗?如果没有,请解释.

解决方法

除了您的代码使用VLA,其中:

>在C99之前不存在
>作为C99的新功能推出
>现在是C11以来的可选功能

不同之处在于自动数组(VLA或静态大小的数组)在超出范围时会自动释放,因此您无法从函数返回它们,而动态分配的数据会持续存在直到它们被明确释放 – 这将在您丢失之前发生如果你不想要内存泄漏,请指向它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读