QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 626|回复: 4

关于C中内存的使用?

[复制链接]
发表于 2005-2-20 22:43:07 | 显示全部楼层 |阅读模式
在C中输出变量内容时,一种是直接复值给变量,然后输出,另外一种是先分配内存给一个变量,然后复值,输出,然后释放内存。
请问两个问题:
1。下面一种做法的原因是不是为了节约内存的资源啊?
2。内存分配是不是一定要分配个指针?
发表于 2005-2-21 10:04:57 | 显示全部楼层
1。下面一种做法的原因是不是为了节约内存的资源啊?
答:不知道你指的是什么,我曾经给未名指针负值,我想你也可能是这个意思.
EG:
int *a;
a=3;
printf("%d",a);
或者:
int *a;
a=(int*)molloc(sizeof(int));
a=3;
printf("%d",a);
在windows下好像都能得到结果,但第一种是错误的,因为a是未名指针.
2.内存分配是不是一定要分配个指针?
答:不一定,不过最好是这样,除非你想让内存空间悬空.或者你有其他方法访问到它,比如从已知某个变量的地址或指针值算偏移量.
回复

使用道具 举报

发表于 2005-2-21 10:15:59 | 显示全部楼层
*a=3
printf("%d",*a);
回复

使用道具 举报

发表于 2005-2-21 14:12:27 | 显示全部楼层
一般地,如果不是全局或静态变量,那么第一种方法将会在堆栈中分配变量,函数执行结束变量自动释放,第二种则是在堆(heap)中产生空间,必须显式释放,否则会造成内存泄漏.
堆栈空间是有限的,但堆栈中的变量访问起来更快.
回复

使用道具 举报

发表于 2005-2-21 17:18:35 | 显示全部楼层
[quote:ed5f43c106="X_worm"]一般地,如果不是全局或静态变量,那么第一种方法将会在堆栈中分配变量,函数执行结束变量自动释放,第二种则是在堆(heap)中产生空间,必须显式释放,否则会造成内存泄漏.
堆栈空间是有限的,但堆栈中的变量访问起来更快.[/quote]
sorry,我前一个确是打错了,谢谢mozilla.
我补充一下X_worm的说法,在我的例子中
int *a;第一种指针变量a分配在栈上,但(*a)在哪谁也不知道.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 16:43 , Processed in 0.038123 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表