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

发布于 2022-09-02 13:31:28 字数 2120 浏览 14 评论 0

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

#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]);
}

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往事随风而去 2022-09-09 13:31:28

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文