有人可以告诉我我在这两种给定方法中使用的内存类型之间的区别 因为在第一次我正在退出这个:
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;
}
答案 0 :(得分:2)
malloc()不应该将它返回的内存归零。在您的情况下,它似乎正在从系统中检索以前未使用过但仍为零的内存。你当然不能指望这一点。另一方面,calloc()会在返回之前为你归零。
答案 1 :(得分:1)
您所看到的是undefined behavior的表现形式。
在第一种情况下,您在函数内部定义一个数组,而在第二种情况下,您通过调用malloc
来分配一个数组。在这两种情况下,该记忆都是未初始化,这意味着您无法预测这些值是什么。
答案 2 :(得分:-1)
当你提出关于动态和静态之间差异的问题时,动态内存位置是在运行时分配的内存位置,而正常情况下我们在之前初始化内存。像ar [3]