标题:求助:关于malloc/free在内存中的有效时间
只看楼主
conglai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-12-23
 问题点数:0 回复次数:5 
求助:关于malloc/free在内存中的有效时间

大侠们请帮看看这段代码有什么问题没?
int *D(void)
{
int *i;
i=(int *)malloc(sizeof(int));
*i=1000;
return i;
}

main(void)
{

int *i;
i=D();
printf("%d",*i);
getch();
}
问题:1,malloc 分配的空间会不会随着D函数的终结而被系统回收?
2,上面这段代码是可以正常运行的,是不是i只是指向了那段空间,这段空间是可以被其他函数重新占有的?
3,是不是只有调用了free之后malloc分配的空间才会被系统回收,这样的话,我若不调用FREE函数,是不是
在整个程序运行完后,MALLOC分配的空间也不能被系统回收?
总言之:我就是想知道,MALLOC分配的空间在没有调用FREE之前,它的生命周期到底有多长??
兄弟们一定要帮帮我啊!!!

搜索更多相关主题的帖子: malloc 内存 free int 空间 
2005-12-23 21:52
沉默的羔羊1013
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2005-12-10
得分:0 
在没有free之前,这段空间没有被收回,只是在函数结束后,D函数中的i这个指针变量被释放掉了,但已经把申请的地址返回给了main中的i这个变量
2005-12-23 22:27
conglai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-12-23
得分:0 
求助:关于MALLOC/FREE同第一个程序类似的程序却有完全不同的结果

lib.h
//定义头文件
#include<stdio.h>
#ifndef _LIB_H_
#define _LIB_H_
#define LEN sizeof(struct student)
#ifndef NULL
#define NULL 0
#endif
enum bool{false,true};
struct student
{
int key;
char name[10];
struct student *s;

};
#endif
oprationg.c
//建立一个空堆栈
#include "lib.h"
struct student *CreatStack(void)
{
struct student *head;
char name[]={"$"};
head=(struct student*)malloc(LEN);
if(!head) return NULL;
head->key=0;
strcpy(head->name,name);
head->s=NULL;
/*free( head );这条语句用或没用结果都是对的,而且编译系统都有一条警告:[Warning] assignment makes pointer from integer without a cast 。而之前我给的那个程序在这个位置没用FREE就是正确的(这是希望的结果),也没有警告;而用了之后就完全是错的(如果按你所说,这也是在预料之中的)。为什么两个类似的程序却有两个不同的表现?*/
return head;
}
main.c
//
主函数里调用构造函数,并验证结果
#include "lib.h"
main(void)
{
struct student *head;
head=CreatStack();
if( !head ) puts("Creat Stack Fail");
printf("%d,%s\n",head->key,head->name);
getch();
}
请兄弟帮我参考参考!!!

2005-12-24 14:10
conglai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-12-23
得分:0 

哪位兄弟帮忙解决上面的问题,谢了!!

2005-12-26 20:24
martinmcx
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-12-26
得分:0 

我想说在建栈的函数中怎么又要把这个栈毁掉了呢?
head存放的是个地址值,在建站函数调用完成后,会自己自动释放。但是你把head释放之后head也就不会指向这个栈了,刚刚建的栈会不会被回收呢?。

2005-12-26 23:41
conglai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-12-23
得分:0 
依照我一直的理解同"沉默的羔羊"想法是一样的,如果这种理解没错的话,应该是这样的:FREE(HEAD)之后只是将HEAD指向的那段内存重新还给了操作系统(它再也不会是本程序占有的空间了),而HEAD里面的地址应该没变,但它指向的却是一个危险空间,有可能因为对内存的非法操作而导致本程序的崩溃.

而我的疑问在于:我想在一个程序中分配空间,而在另一个程序中使用这段空间(如果直接用变量来达到这个目的当然是不可以的);我现在用malloc函数来做到这一点,按照我一直的想法是,MALLOC分配的空间在没有调用FREE之前应该是在整个程序运行过程中都存在的(这在谭浩强的教程中也有这样的用法),可实际结果是它有时正确有时不正确,上面第一个程序是正确的,第二个程序是有编译警告的;所以我想问:用MALLOC分配的空间有效期到底有多长??????????????
2005-12-27 15:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-39730-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027897 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved