C++链表尾插法时产生错误

墨染白筝
  • 147

这个程序是用来写链表实现一元多项式相加的。代码是其中一部分,还没有写完。
头文件:

#include <iostream>
using namespace std;
template<class T>
struct elem{
    T coef;
    T exp;
    elem *next;
};
template<class T>
class LinkList{
public:
    elem<T> *first;
    LinkList(){ first = new elem<T>; first->next = NULL; }
    //void Insert(int coef,int exp);
    void InsertTail(T cofe,T exp);    //向链表的尾部插入元素
    void InitializeTail(T datas[], T n); //尾插法初始化链表
    void DisplayList();//输出链表中的元素
    
};
//链表尾部插入元素
template<class T>void LinkList<T>::InsertTail(T c, T e){
    elem<T> *node = first;
    while (node->next != NULL) node = node->next;
    elem<T> *n = new elem<T>;
    
    n->coef = c;
    n->exp = e;
    node->next = n;
    n->next = NULL;
}
template<class T>void LinkList<T>::InitializeTail(T datas[],T n){
    for (int i = 0; i < 2 * n; i = i + 2) InsertTail(datas[i], datas[i + 1]);
}
template<class T>void LinkList<T>::DisplayList(){
    elem<T> *s = first->next;
    while (s){
        cout << s->coef << " " << s->exp<<"   ";
        s = s->next;
    }
    cout << endl;
}

主函数:

#include<iostream>
#include"LinkList.h"
using namespace std;
void main(){
    LinkList<int> t;
    int n; int arr[] = {0};
    cout << "请输入要输入一元多项式的项数:" << endl;
    cin >> n;
    cout << "请按顺序输入系数和指数的值:" << endl;
    for (int i = 0; i < n * 2; i++){
        cin >> arr[i];
    }
    t.InitializeTail(arr, n);
    t.DisplayList();
}

运行的时候发生异常,数组也少了两个数。

template<class T>void LinkList<T>::InitializeTail(T datas[],T n){
    for (int i = 0; i < 2 * n; i = i + 2) InsertTail(datas[i], datas[i + 1]);
}

我的思路:
这部分地方代码是因为一元多项式有系数也有指数,在输入的时候用一个数组将他们存起来,在使用尾插法的时候将相邻两个传入结构体。但是在输出的时候最后两个不能输出,而且异常终止程序,这是为什么?

错误截图如图所示:
图片描述

回复
阅读 2.1k
1 个回答
✓ 已被采纳

错误在你的main函数中的数组定义这一处。
int n; int arr[] = {0};
你这样只是初始化了一个元素的数组,而你至少要用两个元素,会引起内存覆盖,导致莫名错误!
这样做,在项数规模小于50时就没有问题:
int n; int arr[100] = {0};
c,c++处理内存时要非常小心!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏