今天碰到一个C语言编程的问题,费了老大的劲才给解决。
这个代码是一个学生提交的,实现数据结构中的一个问题,即用单链表实现两个多项式的相加。主要的代码如下:
每是代码会提示如下错误,
通过跟踪STACK,发现错误是在函数AddP中出现,具体出现的位置是在调用free函数时弹出来的。代码看了很久,DEBUG查看链表的内容一切正常,也没有什么逻辑错误。最后,在网上搜索一下,多数文章提示出现这个错误是内存申请得太小 。这个解释我是不太理解,但是试着修改以下函数调用,让程序申请一个大一些的空间:
L=(LNode)malloc(1024*sizeof(LNode));
问题消失。说明问题即出现在这个地方,再仔细查看这一个函数调用,终于明白问题的所在。sizeof函数可以用来计算一个结构体占用的内存空间,但是上面一句调用中,LNode被定义为:
typedef struct {} *LNode;
显然,这个地方的LNode是一个指针,其sizeof永远为4,而不管我们的结构体中存储的是什么。实际上,正确的写法应该是:
L=(LNode)malloc(sizeof(Node));
改正后,问题消失。