♣
快疯了,动态分配的内存重叠
结构体定义
typedef struct databaselnode
{
int stunumber;
char stuname[40];
int stuage;
char stusex[40];
char stuadd[40];
char stutime[40];
char stutel[40];
struct databaselnode *next;
}databaselnode,*database;
database head;
head已经分配空间并且head->next=null;
然后:怪事出现了:
在下面这个函数中动态分配的内存地址居然跑回去了
和前面动态分配的重叠在一起
void readfile(void)
{
database q,p;/*定义2个数据变量*/
file *fp;
char str[40];
q=(database)malloc(sizeof(database));/*为q动态分配内存空间*/
head->next=q;/*取数据库的第一个值*/
if((fp=fopen("data.txt","r"))==null)/*打开数据文件*/
{printf("%s\n","没有数据库文件;请新建数据库");
head->next=null;
free(q);/*释放q的空间*/
return;/*当没有数据文件的时候,就不用读取*/
}
do
{
fgets(str,40,fp);//学号
q->stunumber=chartonum(str);//读的字符转为数字
printf("%d\n",q->stunumber);
fgets(q->stuname,40,fp);//名字//多读了回车,下面删除掉
q->stuname[strlen(q->stuname)-1]=\0;
printf("%s\n",q->stuname);
fgets(str,40,fp);//年龄
q->stuage=chartonum(str);
printf("%d\n",q->stuage);
char ss[40];//性别
fgets(ss,40,fp);//多读了回车,下面删除掉
ss[strlen(ss)-1]=\0;
strcpy(q->stusex,ss);
fgets(q->stuadd,40,fp);//地址
q->stuadd[strlen(q->stuadd)-1]=\0;
fgets(q->stutime,40,fp);//入学时间
q->stutime[strlen(q->stutime)-1]=\0;
fgets(q->stutel,40,fp);//电话
if(feof(fp)==0)/*如果不是在文件末尾,才去掉最后的换行符,因为最后一个数据没有换行符*/
{
q->stutel[strlen(q->stutel)-1]=\0;
}
printf("%s\n",q->stutel);
p=(database)malloc(sizeof(database));
q->next=p;
q=q->next;
}while(feof(fp)==0);/*如果没有到文件末尾,则循环上去*/
q=null;
fclose(fp);
}
到底是怎么回事啊
难道系统会自动释放malloc分配的空间吗?昏
附需要读取的文件
6
6
6
6
6
6
6
1
1
1
1
1
1
1
3
3
3
3
3
3
3
2
2
2
2
2
2
2
· 网友精彩回答:
大概看了一眼,没看出什么问题。不过一般用链表的用法不用像你那么麻烦需要定义一个q变量去保存最后一个元素的位置。你只要新创建节点以后,把原来的head链接到新节点的next,再用新节点作为head就可以了。如果你要保证顺序就用双向链表。最后反向输出就可以了。
p = malloc(...)
p->next = head;
head = p;
- 更多问题:
- · 求MYECLIPSE开发EJB的例子
- · 我的主板是intel 915GAV在一次意外停电后声音就不响了,这是怎么回事,是烧了吗?
- · 求MYECLIPSE开发EJB的例子
- · 各位仁兄,小弟想请教一下怎样用VB+ACCESS实现将字段1里面的数字乘上一个系数并把所得的结果写入字段2中.谢谢了先!
- · 怎样实现这样的xslt?
- · 如何查询上月数据 的问题.急 急 急!!!
- · tomcat在windows20003sp1上使用80端口的问题
- · 接到过去领导打来的电话!!!!!(感动)
- · 请教,象下面这两种情况用不用手工释放内存
- · PB下面如何实现关机?
- · 打印机共享问题???
- · 关于一个网上xml树型菜单例子的问题:
- · 为什么某些后缀的文件不能下载?
- · eclipse 3.0.2里怎么配置struts??
- · 想问一下,关于informix中的substring
- · 关于影子复制的问题

