c - 动态内存分配和普通内存分配有什么区别?

标签 c arrays pointers dynamic-memory-allocation

有人可以告诉我我在两种给定方法中使用的内存类型之间的区别吗 因为在第一部分中,我的输出是这样的:

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

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

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

下面是相关代码:-

方法一:

#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;
}

最佳答案

malloc() 不应将其返回的内存清零。看来在您的情况下,它恰好是从系统中检索以前未使用过且仍然为零的内存。你当然不能指望这一点。另一方面,calloc() 在返回之前会为您清零内存。

关于c - 动态内存分配和普通内存分配有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48463450/

相关文章:

c - 如何简化以下 C 代码?

javascript - 从数据库访问多维数组并保存

c - 为什么带星号和不带星号的指针变量在 printf 中表现不同?

使用三重指针创建矩阵会导致段错误

pointers - 无法正确取消引用指针并从内存地址数组中获取实际值

c - 换行符替换 char 数组中的第一个值

c - 如何在 Shell FFmpeg 中转义单引号?

c - 使用 getenv 函数

javascript - 排序 "day" "week" "month"和 "year"

r - 如何将 array1 (2D) 添加到 array2 (3D)?