C语言建立单链表出错误及其分析
2014-11-13 17:24
232 查看
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
struct chain
{
int value1;
int value2;
struct chain *next;
};
struct chain *create()
{
struct chain *head,*tail,*p;
int i,n,x;
int y;
printf("Enter a number n : ");
scanf("%i",&n);
srand((unsigned)time(NULL));
head = tail = NULL;
p = (struct chain *)malloc(sizeof(struct chain));
p->next =NULL;
for (i=0;i<=n;i++)
{
x= rand()%100+1;
y = rand()%10 +1;
p->value1 = x;
p->value2 = y;
if (head == NULL)
head = tail =p;
else
tail = tail->next;
tail->next =p;
}
return head;
}
int main (void)
{
struct chain *p,*q;
q = create();
while (q)
{
printf("%4iand%4i",q->value1,q->value2);
p = q->next;
free(q);
q =p;
}
printf("\n");
return 0;
}
[root@localhost Gcc]# ./a.out
Enter a number n : 5
*** glibc detected *** ./a.out: double free or corruption (fasttop): 0x0000000001663010 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x76166)[0x7fd090783166]
./a.out[0x400859]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7fd09072bd1d]
./a.out[0x400619]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fd:00 654092 /root/Gcc/a.out
00600000-00601000 rw-p 00000000 fd:00 654092 /root/Gcc/a.out
01663000-01684000 rw-p 00000000 00:00 0 [heap]
7fd0904f7000-7fd09050d000 r-xp 00000000 fd:00 130818 /lib64/libgcc_s-4.4.7-20120601.so.1
7fd09050d000-7fd09070c000 ---p 00016000 fd:00 130818 /lib64/libgcc_s-4.4.7-20120601.so.1
7fd09070c000-7fd09070d000 rw-p 00015000 fd:00 130818 /lib64/libgcc_s-4.4.7-20120601.so.1
7fd09070d000-7fd090898000 r-xp 00000000 fd:00 130831 /lib64/libc-2.12.so
7fd090898000-7fd090a97000 ---p 0018b000 fd:00 130831 /lib64/libc-2.12.so
7fd090a97000-7fd090a9b000 r--p 0018a000 fd:00 130831 /lib64/libc-2.12.so
7fd090a9b000-7fd090a9c000 rw-p 0018e000 fd:00 130831 /lib64/libc-2.12.so
7fd090a9c000-7fd090aa1000 rw-p 00000000 00:00 0
7fd090aa1000-7fd090ac1000 r-xp 00000000 fd:00 130824 /lib64/ld-2.12.so
7fd090cb6000-7fd090cb9000 rw-p 00000000 00:00 0
7fd090cbc000-7fd090cc0000 rw-p 00000000 00:00 0
7fd090cc0000-7fd090cc1000 r--p 0001f000 fd:00 130824 /lib64/ld-2.12.so
7fd090cc1000-7fd090cc2000 rw-p 00020000 fd:00 130824 /lib64/ld-2.12.so
7fd090cc2000-7fd090cc3000 rw-p 00000000 00:00 0
7fff63efe000-7fff63f13000 rw-p 00000000 00:00 0 [stack]
7fff63f6a000-7fff63f6b000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
77and 8 0and 0Aborted
错误原因在于p节点的生成与p->value 赋值的位置,应该放在for循环内部,表示没循环一次就必须有内存分配一个节点地址。
相关文章推荐
- C语言创建链表错误之通过指针参数申请动态内存实例分析
- [转] GDI+编程中的一条错误信息及其原因分析
- GDI+编程中的一条错误信息及其原因分析
- 链表操作错误分析
- 链表的建立,输出,删除,插入运算的c语言实现
- c语言数据结构分析2之 链表插入删除
- GDI+编程中的一条错误信息及其原因分析
- C语言常见错误分析(基础细节面试点之一)
- C语言常见错误分析汇总
- 请大家看一下一个c语言中的链表问题,下面的代码是有错误的!!请大家说出错误的原因,以及修改的方法!!!
- [转载]C语言链表的建立、插入和删除
- C语言常见错误分析 [转]
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议)
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议) 转自CSDN:gushenghua的专栏
- C语言常见错误分析汇总
- SqlServer链接服务器配置及其在作业更新时出现 [SQLSTATE 42000](错误 7410)的分析处理
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议)
- GDI+编程中的一条错误信息及其原因分析
- 【C语言】字符串--strcpy函数解答及其分析
- C语言常见错误分析(基础细节面试点之一)<转摘>