请高手过目,为什么使用函数就报内存不能written,而直接使用main里的代码就没问题。

wuyujun0133 2011-03-05 08:14:50
代码清单如下:
请高手过目,为什么使用函数就报内存不能written,而直接使用main里的代码就没问题。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef int DataType;

typedef struct
{
DataType data;
struct ListNode *next;

}ListNode,*LinkList;

/*
void InitList(LinkList head)
{
head = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
exit(-1);

head->next = NULL;
printf("OK");
}
*/
void main()
{

LinkList head = NULL;
ListNode *p;
//InitList(head);


head = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
exit(-1);

head->next = NULL;
printf("OK\n");


p = (ListNode *)malloc(sizeof(ListNode));
p->data = 100;
p->next = NULL;

head->next = p; //如果使用函数InitList(),就在运行到这里报错 内存不能written

if(head->next != NULL)
printf("NOT NULL");
else
printf("NULL");

}

先行谢过!!
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyujun0133 2011-03-06
  • 打赏
  • 举报
回复
困惑我一个晚上,终于明白了,茅塞顿开啊! 谢谢诸位出手相助。
proghua 2011-03-05
  • 打赏
  • 举报
回复
参数值传递问题
一二三楼都是对的
delphiwcdj 2011-03-05
  • 打赏
  • 举报
回复
是局部变量的问题
jialejiahi 2011-03-05
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef int DataType;

typedef struct
{
DataType data;
struct ListNode *next;

}ListNode,*LinkList;

LinkList InitList(LinkList head)
{
head = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
exit(-1);
head->next = NULL;
printf("OK");
return head;
}

void main()
{

LinkList head = NULL;
ListNode *p;
head = InitList(head);

p = (ListNode *)malloc(sizeof(ListNode));
p->data = 100;
p->next = NULL;

head->next = p; //如果使用函数InitList(),就在运行到这里报错 内存不能written

if(head->next != NULL)
printf("NOT NULL");
else
printf("NULL");

}

这种通过返回值的方法也挺常用的。
dongxu1234 2011-03-05
  • 打赏
  • 举报
回复
head 用没有得到初始化,head还是null啊,
如果利用函数去改变实参的值那就把实参的指针作为函数的形参;
所以你想要改变head的值就要把head的地址作为参数
fengzhw 2011-03-05
  • 打赏
  • 举报
回复
这个代码从哪里弄来的?
有一本数据结构书上,建议空链表是带有一个哑元节点的结构;

你这个就是没有任何多余元素的链表,最大的困难就出在初始化上。
void InitList(LinkList * phead)
{
LinkList head = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
exit(-1);

head->next = NULL;
*phead = head ; //需要你仔细考虑一下指向指针的指针,再看看那种需要一个哑元的链表是不是值得
printf("OK");
}
newfarmerchi 2011-03-05
  • 打赏
  • 举报
回复

//你的initList(LinkList head) 只是建立了head 的副本,真正的head
//并没有建立,给它赋值程序当然崩溃了。改成引用或指针的指针就可以了。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef int DataType;

typedef struct ListNode
{
DataType data;
struct ListNode *next;

}*LinkList;//此处重复定义


void InitList(LinkList &head)//引用head。如果是c,用指针的指针。
{
head = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
exit(-1);

head->next = NULL;
printf("OK\n");
}

void main()
{

LinkList head = NULL;
ListNode *p;
InitList(head);

p = (ListNode *)malloc(sizeof(ListNode));
p->data = 100;
p->next = NULL;

head->next = p;
if(head->next != NULL)
printf("NOT NULL\n");
else
printf("NULL");

}


69,382

社区成员

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

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