【发布时间】:2018-01-26 14:33:48
【问题描述】:
谁能告诉我我在这里使用的两种给定方法中的内存类型之间的区别 因为一开始我是这样说的:
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;
}
方法二:
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;
}
【问题讨论】:
-
在这两种情况下,您只初始化了 一个 数组元素(假设
n至少为4),其余的都没有,因此行为未定义。 -
使用malloc后必须手动释放内存。为此,您需要使用 free(a);如果你不这样做,那里的垃圾将从你的程序中保留下来,直到你重新启动计算机,你将无法使用它。如果需要,您还可以重新分配大小。
-
@dbl 分配的内存通常会在程序退出时交还给系统。
-
导致奇怪输出的不是两个程序之间的差异,而是它们的共同点:数组未初始化。在一种情况下,它们碰巧是
0,而在另一种情况下却不是——内存分配在用户空间的不同部分。 -
... 并且在 C 语言级别没有为什么,因为您的两个程序都表现出 未定义的行为就C语言而言。
标签: c arrays pointers dynamic-memory-allocation