C语言中的malloc函数用法>?
展开全部
void
main()
{
int
a[5],*p
;
p=a;
p=(int*)malloc(5*sizeof(int))
;
//此处这样写有问题,根本就没必要动态分配内存,因为p指向的是一个数组,数组已经定义,也就是已经分配了空间,纯粹多余
for(int
i=0;i<5;i++)
scanf("%d",p++);
free(p);
}
malloc()是是在内存的动态存储区中分配一个长度为size的连续空间。
当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为
NULL并执行相应的操作
malloc分配的内存是位于堆中的,并且没有初始化内存的内容使用了malloc没有使用free,注意释放内存
main()
{
int
a[5],*p
;
p=a;
p=(int*)malloc(5*sizeof(int))
;
//此处这样写有问题,根本就没必要动态分配内存,因为p指向的是一个数组,数组已经定义,也就是已经分配了空间,纯粹多余
for(int
i=0;i<5;i++)
scanf("%d",p++);
free(p);
}
malloc()是是在内存的动态存储区中分配一个长度为size的连续空间。
当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为
NULL并执行相应的操作
malloc分配的内存是位于堆中的,并且没有初始化内存的内容使用了malloc没有使用free,注意释放内存
展开全部
p=(int
*)malloc(5*sizeof(int))
/*这个也就是说P指向的连续5个空间的首地址*/
for(i=0;i<5;i++)
scanf("%d",p++);
用法没
问题,但是问题是。。你最后p指向了
数组的最后,。。
你还要调整p,scanf("%d",(p+i))多好啊
动态申请1维数组,int
*a;
a=(int
*)malloc(5*sizeof(int))
;
for(i=0;i<5;i++)
scanf("%d",p++);
以后你就可以引用a数组了
*)malloc(5*sizeof(int))
/*这个也就是说P指向的连续5个空间的首地址*/
for(i=0;i<5;i++)
scanf("%d",p++);
用法没
问题,但是问题是。。你最后p指向了
数组的最后,。。
你还要调整p,scanf("%d",(p+i))多好啊
动态申请1维数组,int
*a;
a=(int
*)malloc(5*sizeof(int))
;
for(i=0;i<5;i++)
scanf("%d",p++);
以后你就可以引用a数组了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用,两者的区别在于,一个是创建静态内存,一个是
动态内存
。
只是你要做成服务程序或者有基于这个数组的算法时,别忘记用完p之后要free(),并且让p=(int*)NULL
动态内存
。
只是你要做成服务程序或者有基于这个数组的算法时,别忘记用完p之后要free(),并且让p=(int*)NULL
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二种用法有点问题,应该这样改一下:
int
*arr
=
(int
*)malloc(5
*
sizeof(int));
int
*p
=
arr;
int
i;
for
(i
=
0;
i
<
5;
++i)
scanf("%d",
p++);
...
...
free(arr);
int
*arr
=
(int
*)malloc(5
*
sizeof(int));
int
*p
=
arr;
int
i;
for
(i
=
0;
i
<
5;
++i)
scanf("%d",
p++);
...
...
free(arr);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |