malloc的什么时候必须使用它?

chengrg 2004-08-17 09:15:17
先定义
typedef struct LNode
{
ElemType data;
struct LNode *next;

} LNode
那么 
LNode *p;

LNode *p=(LNode *)malloc(sizeof(LNode));
有什么区别?
如何实现下面这个函数:
MakeNode(LNode *p,ElemType e);
//分配由p指向的值为e的结点,并返回OK;若分配失败,则返回ERROR
我这样做就会出错的:
#define ElemType int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define NULL 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;

} LNode;
main()
{
LNode p;
Status MakeNode();
if(MakeNode(&p,3))
printf("\nstart:\np.data:%d,p.next:%d",p.data,p.next);
}
Status MakeNode(LNode *p,ElemType e)
{
p=(LNode *)malloc(sizeof(LNode));
if(!p) return ERROR;
p->data=e;
p->next=NULL;
return OK;
}
...全文
763 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckyxl 2004-08-17
  • 打赏
  • 举报
回复
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
goodluckyxl 2004-08-17
  • 打赏
  • 举报
回复
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
steel007 2004-08-17
  • 打赏
  • 举报
回复
LNode *p;// 这只是声明了一个指针变量,但是指向谁并不知道,不能对其进行操作

LNode *p=(LNode *)malloc(sizeof(LNode));//这是声明了一个指针变量,并且对其初始化---〉由malloc动态申请内存用于放置结构体LNode,然后将指针变量指向这个新分配的内存,可以对其进行操作了~
findstone 2004-08-17
  • 打赏
  • 举报
回复
malloc用来动态的进行内存申请,所以当你要开辟新的节点时,当你不知道要给该节点分配多大内存空间时,要使用它来满足你的需要。
使用完malloc后一定要将申请到的内存释放掉,用free函数。
chengrg 2004-08-17
  • 打赏
  • 举报
回复
总算做到了,具体如下,不妥之处,敬请指正:
#define ElemType int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define NULL 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;

}*Link,*Position;
main()
{
Link p;
Status MakeNode();
printf("\n&p:%d:",&p);
if(MakeNode(&p,3))
printf("\nstart:\np.data:%d,p.next:%d",p->data,p->next);
}
Status MakeNode(Link *p,ElemType e)
{
printf("\np:%d",p);
*p=(Link)malloc(sizeof(struct LNode));
printf("\n*p:%d",*p);
printf("\np:%d",p);
if(!*p) return ERROR;
(*p)->data=e;
(*p)->next=NULL;
return OK;
}
zhangfjj 2004-08-17
  • 打赏
  • 举报
回复
molloc之类的称动态存储管理,顾名思义,就是当你申请的内存大小未知时,需要在程序运行时确定其大小时,此时无法事先申请内存,只能使用malloc函数来动态申请了
wwwooowww 2004-08-17
  • 打赏
  • 举报
回复
再动态分配空间的时候使用.
typedef struct
{
ElemType data;
struct LNode *next;

}LNode;


struct 后的LNode 不能要.并且要加分号.
sekelon 2004-08-17
  • 打赏
  • 举报
回复
一般这种要分配内存的函数的返回值不用0和1的,而是用分配好的地址来返回,如果错误就返回NULL
Status LNode* MakeNode( ElemType e ) {

LNode* p = ( LNode* )malloc( sizeof( LNode ) );
if ( NULL != p ) {

pt->data = e;
pt->next = NULL;

}
return p;

}
在指针定义的时候可以不用malloc,仅仅定义就可以了,但是在给指针所指向的内存地址赋值的时候则一定要先malloc,确定申请到了一块可以使用的内存后再赋值,以免发生异常错误。
huangyang88 2004-08-17
  • 打赏
  • 举报
回复

Status MakeNode(LNode **p,ElemType e)
{
*p=(LNode *)malloc(sizeof(LNode));
LNode* pt = *p;
if(!pt) return ERROR;
pt->data=e;
pt->next=NULL;
return OK;
}

chengrg 2004-08-17
  • 打赏
  • 举报
回复
更正主题: malloc在什么时候必须使用它?


69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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