关于malloc函数的问题

a56508820 2008-11-25 11:10:40
#include<stdio.h>
void main()
{
double *p;int i;
for(i=0;i<10;i++)
{scanf("%lf",p[i]);
printf("%10lf",p[i])};
}

#include<malloc.h>
#include<stdio.h>
void main()
{
double *p;int i;
p=(double*)malloc(10*sizeof(double));
for(i=0;i<10;i++)
{scanf("%lf",p[i]);
printf("%10lf",p[i])};
}

输入相同的数,这两个程序运行的结果是一样的,那么我们还用malloc函数分配内存空间干什么,谁能告诉我有用malloc与没用有什么区别,本人是初学的,希望能指教一下我
...全文
130 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
elmnd 2008-11-26
  • 打赏
  • 举报
回复
第一个在栈,第二个在堆。至于楼主为什么能运行第一个程序,是因为
那个*p后面(前面?)的空间没有被你用到。否则很容易出错的。
还有,个人建议不要用void main()
iumlomki 2008-11-26
  • 打赏
  • 举报
回复
补充一点,用了malloc以后要记得free,如果不free的话,malloc出来的内存不会被释放。
lsd1025 2008-11-26
  • 打赏
  • 举报
回复
同意1,3就是这个意思了!
ningweidong 2008-11-26
  • 打赏
  • 举报
回复

#include <stdio.h>
void main()
{
double *p;int i;

for(i=0; i<10; i++)
{
scanf("%lf", p[i]); //指针p并未初始化,它指向的位置不明,直接使用p[i]是很危险的动作,有可能造成崩溃
printf("%10lf", p[i]);
}
}

#include <malloc.h>
#include <stdio.h>
void main()
{
double *p = NULL;
int i;

p = (double*)malloc(10*sizeof(double));
if (NULL == p)
{
return;//如果没申请到堆内存,就退出程序
}
for(i=0; i<10; i++) //p现在指向堆中申请到的数据,是安全的
{
scanf("%lf", p[i]);
printf("%10lf", p[i]);
}

free(p);
p = NULL;//使用完后,要释放申请的内在,并将指针置空
}
johnelf 2008-11-26
  • 打赏
  • 举报
回复
是 第一个野指针,会崩的
a56508820 2008-11-26
  • 打赏
  • 举报
回复
看来见到一个比我还新的新人
堕落的天使 2008-11-26
  • 打赏
  • 举报
回复
你那么多变量都没有定义怎么运行啊!!!!!
a56508820 2008-11-26
  • 打赏
  • 举报
回复
谢谢各位,来这里真的学到好多东西~~~其实我现在指针还未学,但是老师就要用它来做综合性实验。。。。。。什么也没有给我们说明。。
once_and_again 2008-11-26
  • 打赏
  • 举报
回复
int argc....
once_and_again 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 elmnd 的回复:]
第一个在栈,第二个在堆。至于楼主为什么能运行第一个程序,是因为
那个*p后面(前面?)的空间没有被你用到。否则很容易出错的。
还有,个人建议不要用void main()
[/Quote]int main (char argc,char *argv[],char **arge)
tukahara 2008-11-26
  • 打赏
  • 举报
回复
第一个程序p只是一个指针,第二成程序p指针指向一片内存区域。
把程序写成
for(...)
scanf(...)
for(...)
printf(...)
就可以看到效果了
chenlei613 2008-11-26
  • 打赏
  • 举报
回复
同7楼,malloc分配堆空间,使用完后需用free()函数释放堆空间。若不释放,会造成内存的浪费,伴随这个函数运行的次数加大,机器会变慢。
MilanSpiRiT 2008-11-26
  • 打赏
  • 举报
回复
楼主运气不错啊。。。
yellowhwb 2008-11-26
  • 打赏
  • 举报
回复
不malloc,直接使用未初始化的指针,内存全写乱了,后面肯定会当机的
brookmill 2008-11-25
  • 打赏
  • 举报
回复
LZ的运气不错,去买张彩票吧 :)
我把第一个程序跑了一下,直接挂掉了
如果用malloc, 肯定不会出错;
如果不用malloc,有可能不出错,也有可能出错,看运气了
多米蒂尔 2008-11-25
  • 打赏
  • 举报
回复
表面看上去没区别,实际有区别的,第一个程序p没有初始化,也没有赋有效值,是个野指针(你不知道指向内存)!你直接p[i]=XX这样赋值,你知道值赋到哪个内存单元了吗?不知道,万一程序开始的时候p指向一个危险的内存区域,你随便赋值,系统可能完完喽!第二个不一样哦,malloc函数返回一个有效值给p,p指向堆区里一个系统分配给你这个程序的一个内存空间,这个空间是安全的,就是给你这个程序用的,你爱怎么赋值都可以,就是这样的

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧