什么是动态内存分配和正常内存分配之间的区别?

时间:2018-01-26 14:33:48

标签: c arrays pointers dynamic-memory-allocation

有人可以告诉我我在这两种给定方法中使用的内存类型之间的区别 因为在第一次我正在退出这个:

5-->1893664096-->32766-->-1358605976-->2-->1893664096

在第二种方法中我得到了这个: -

5-->0-->0-->0-->2-->0

下面是

的代码: -

方法1:

#include<stdio.h>
#include <stdlib.h>
int main()
{
  int n;
  scanf("%d",&n);
  int arr[n];
  arr[3]=2;
  for(int i=0;i<n;i++)
    printf("-->%d",arr[i]);
  return 0;
}

方法2:

int main()
{
  int *a;
  int n;
  scanf("%d",&n);
  a=(int*) malloc(sizeof(int)*n);
  a[3]=2;
  for(int i=0;i<n;i++)
    printf("-->%d",a[i]);
  return 0;
}

3 个答案:

答案 0 :(得分:2)

malloc()不应该将它返回的内存归零。在您的情况下,它似乎正在从系统中检索以前未使用过但仍为零的内存。你当然不能指望这一点。另一方面,calloc()会在返回之前为你归零。

答案 1 :(得分:1)

您所看到的是undefined behavior的表现形式。

在第一种情况下,您在函数内部定义一个数组,而在第二种情况下,您通过调用malloc来分配一个数组。在这两种情况下,该记忆都是未初始化,这意味着您无法预测这些值是什么。

答案 2 :(得分:-1)

当你提出关于动态和静态之间差异的问题时,动态内存位置是在运行时分配的内存位置,而正常情况下我们在之前初始化内存。像ar [3]