开发者社区> 问答> 正文

C语言结构体指针问题?报错

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]



单独调用这个函数没有任何问题,但是当我把上面这行代码放到for循环里面的时候,就报错了...

下面是我用gdb调试的错误信息:

Program received signal SIGSEGV, Segmentation fault.
0x00000000004010c6 in copyExp (head=0x7fffffffdbc8, from=0xf63d4e2e)
    at expression.c:31
31		result->c = from->c;
(gdb)



希望有大神可以帮忙解决,谢谢了。

展开
收起
爱吃鱼的程序员 2020-06-12 10:26:39 682 0
2 条回答
写回答
取消 提交回答
  • 精于基础,广于工具,熟于业务。

    越界导致的

    2020-06-12 10:50:12
    赞同 展开评论 打赏
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    很有可能是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'>

    引用来自“莫扎特的代码”的评论

    很有可能是result分配内存出错,result为null,或者from为null?

    2020-06-12 15:10:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多