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;
}
10 个解决方案
#1
更正主题: malloc在什么时候必须使用它?
#2
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;
}
#3
一般这种要分配内存的函数的返回值不用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,确定申请到了一块可以使用的内存后再赋值,以免发生异常错误。
Status LNode* MakeNode( ElemType e ) {
LNode* p = ( LNode* )malloc( sizeof( LNode ) );
if ( NULL != p ) {
pt->data = e;
pt->next = NULL;
}
return p;
}
在指针定义的时候可以不用malloc,仅仅定义就可以了,但是在给指针所指向的内存地址赋值的时候则一定要先malloc,确定申请到了一块可以使用的内存后再赋值,以免发生异常错误。
#4
再动态分配空间的时候使用.
typedef struct
{
ElemType data;
struct LNode *next;
}LNode;
struct 后的LNode 不能要.并且要加分号.
typedef struct
{
ElemType data;
struct LNode *next;
}LNode;
struct 后的LNode 不能要.并且要加分号.
#5
molloc之类的称动态存储管理,顾名思义,就是当你申请的内存大小未知时,需要在程序运行时确定其大小时,此时无法事先申请内存,只能使用malloc函数来动态申请了
#6
总算做到了,具体如下,不妥之处,敬请指正:
#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;
}
#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;
}
#7
malloc用来动态的进行内存申请,所以当你要开辟新的节点时,当你不知道要给该节点分配多大内存空间时,要使用它来满足你的需要。
使用完malloc后一定要将申请到的内存释放掉,用free函数。
使用完malloc后一定要将申请到的内存释放掉,用free函数。
#8
LNode *p;// 这只是声明了一个指针变量,但是指向谁并不知道,不能对其进行操作
和
LNode *p=(LNode *)malloc(sizeof(LNode));//这是声明了一个指针变量,并且对其初始化---〉由malloc动态申请内存用于放置结构体LNode,然后将指针变量指向这个新分配的内存,可以对其进行操作了~
和
LNode *p=(LNode *)malloc(sizeof(LNode));//这是声明了一个指针变量,并且对其初始化---〉由malloc动态申请内存用于放置结构体LNode,然后将指针变量指向这个新分配的内存,可以对其进行操作了~
#9
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
#10
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
#1
更正主题: malloc在什么时候必须使用它?
#2
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;
}
#3
一般这种要分配内存的函数的返回值不用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,确定申请到了一块可以使用的内存后再赋值,以免发生异常错误。
Status LNode* MakeNode( ElemType e ) {
LNode* p = ( LNode* )malloc( sizeof( LNode ) );
if ( NULL != p ) {
pt->data = e;
pt->next = NULL;
}
return p;
}
在指针定义的时候可以不用malloc,仅仅定义就可以了,但是在给指针所指向的内存地址赋值的时候则一定要先malloc,确定申请到了一块可以使用的内存后再赋值,以免发生异常错误。
#4
再动态分配空间的时候使用.
typedef struct
{
ElemType data;
struct LNode *next;
}LNode;
struct 后的LNode 不能要.并且要加分号.
typedef struct
{
ElemType data;
struct LNode *next;
}LNode;
struct 后的LNode 不能要.并且要加分号.
#5
molloc之类的称动态存储管理,顾名思义,就是当你申请的内存大小未知时,需要在程序运行时确定其大小时,此时无法事先申请内存,只能使用malloc函数来动态申请了
#6
总算做到了,具体如下,不妥之处,敬请指正:
#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;
}
#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;
}
#7
malloc用来动态的进行内存申请,所以当你要开辟新的节点时,当你不知道要给该节点分配多大内存空间时,要使用它来满足你的需要。
使用完malloc后一定要将申请到的内存释放掉,用free函数。
使用完malloc后一定要将申请到的内存释放掉,用free函数。
#8
LNode *p;// 这只是声明了一个指针变量,但是指向谁并不知道,不能对其进行操作
和
LNode *p=(LNode *)malloc(sizeof(LNode));//这是声明了一个指针变量,并且对其初始化---〉由malloc动态申请内存用于放置结构体LNode,然后将指针变量指向这个新分配的内存,可以对其进行操作了~
和
LNode *p=(LNode *)malloc(sizeof(LNode));//这是声明了一个指针变量,并且对其初始化---〉由malloc动态申请内存用于放置结构体LNode,然后将指针变量指向这个新分配的内存,可以对其进行操作了~
#9
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
#10
1.malloc是用来进行内存分配,当然在需要分配的时候使用
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc
2.需要重新分配(增加)内存,前面最好用malloc分配,然后用realloc