ubuntu15.04环境下报错:段错误
涉及函数代码:
void copyExp(struct elem **head, struct elem * from){ struct elem * result = (struct elem*)malloc(sizeof(struct elem)); result->c = from->c; result->n = from->n; result->next = NULL; (*head) = result; from = from->next; while(from != NULL){ struct elem *p = (struct elem*)malloc(sizeof(struct elem)); p->c = from->c; p->n = from->n; p->next = NULL; result->next = p; result = p; from = from->next; } }
copyExp(&f[n+1], f[n]); // 将f[n]的值赋值给f[n+1]
下面是我用gdb调试的错误信息:
Program received signal SIGSEGV, Segmentation fault. 0x00000000004010c6 in copyExp (head=0x7fffffffdbc8, from=0xf63d4e2e) at expression.c:31 31 result->c = from->c; (gdb)
很有可能是result分配内存出错,result为null,或者from为null?是from的问题,我单独调用from->c;都要报错你检查下你的for循环很有可能是越界了。造成from为野指针intN=9;intn;for(n=0;n<N-1;n++){copyExp(&f[n+1],f[n]);//大概是这个样子,应该不是越界的问题啊}用for来调用,,,,,主要是算法错了,另外malloc得考虑一下null意思是malloc后先检查下result是不是null?艹,指针让你到处丢,不段错误才怪了。谁教的你from=from->next;这种写法。之前申请的from内存哪去了
from是形参啊,只是一个拷贝应该可以这么用的吧
单看函数信息太少,你在函数体中,在堆中构造了一个与from一样的链表,将起始地址复制给head。
在看copyExp(&f[n+1],f[n]);f是一个链表头指针数组,不清楚你整个代码,你是想把在整个数组中每个元素都创建一个同样的链表
从错误来看要么是传入from并没有指向一个有效的元素,这个要看你循环是否有f越界的可能,要么是malloc失败了,这个问题一般不会出现,也许是你逻辑上的问题导致代码申请了过多的内存,或者是单纯你的内存需求太大了
<divclass='ref'>版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。