大佬们帮我看看代码,C++代码返回值3221226356,谢谢了

由命戏 2023-05-14 20:30:53

不知道哪里出问题了

#include <iostream>
#include <cstring>
using namespace std;
typedef int ElemType;

typedef struct LNode {
	ElemType sn;
	ElemType sc;
	string name;
	struct LNode *next;
} *LinkList, LNode;

void InitList(LinkList &L);
LinkList List_HeadInsert(LinkList &L);
void InsertLink(LinkList &L1, LinkList &L2);
void display(LinkList L);
int main() {
	LinkList L1;
	InitList(L1);
	List_HeadInsert(L1);
	display(L1);
}

void InitList(LinkList &L) {
	L = (LNode *)malloc(sizeof(LNode));
	L->next = NULL;
}

LinkList List_HeadInsert(LinkList &L) {
	ElemType tsn, tsc;
	string tname;
	L = (LinkList)malloc(sizeof(LNode));
	LNode *s, *r = L;
	cin >> tsn >> tname >> tsc;
	while (true) {
		s = (LinkList)malloc(sizeof(LNode));
		s->name = tname;
		s->sc = tsc;
		s->sn = tsn;
		r->next = s;
		r = s;
		cin >> tsn >> tname >> tsc ;
	}
	r->next = NULL;
	return L;
}

void InsertLink(LinkList &L1, LinkList &L2) {
	L2->next = L1->next;
	L1->next = L2;
}

void display(LinkList L) {
	for (LNode *p = L -> next; p != NULL; p = p -> next)
		cout << p -> sn << " " << p->name << " " << p->sc << endl;
	cout << endl;
}

 

...全文
102 2 打赏 收藏 转发到动态 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

这个返回值 3221226356 在 Windows 平台上通常是由于程序发生了访问非法内存的错误,也就是所谓的“段错误”(Segmentation Fault)。

经过查看代码,可能存在以下问题:

  1. 在函数 List_HeadInsert 中,你已经为头结点 L 分配了空间,却又在循环内部重新分配结点空间并且没有释放。这会导致内存泄漏和无法预料的错误。建议将头结点初始化放到 InitList 函数中。

  2. 在函数 display 中,当 L 为空链表时,循环内部会出现对 NULL 指针的访问,这也会导致非法访问内存的问题。可以添加判断语句来避免这种情况。

  3. 在输入数据时,没有判断是否已经读入完毕,如果输入完最后一个结点后没有及时退出,会进入死循环,导致程序崩溃。

根据以上问题,下面给出修改后的代码:

#include <iostream>
#include <cstring>

using namespace std;

typedef int ElemType;
typedef struct LNode {
    ElemType sn;
    ElemType sc;
    string name;
    struct LNode *next;
} *LinkList, LNode;

void InitList(LinkList &L);
LinkList List_HeadInsert(LinkList &L);
void InsertLink(LinkList &L1, LinkList &L2);
void display(LinkList L);

int main() {
    LinkList L1;
    InitList(L1);
    List_HeadInsert(L1);
    display(L1);
    return 0; // 程序结束
}

void InitList(LinkList &L) {
    L = (LNode *)malloc(sizeof(LNode));
    L->next = NULL;
}

LinkList List_HeadInsert(LinkList &L) {
    ElemType tsn, tsc;
    string tname;
    LNode *s, *r = L;
    while (cin >> tsn >> tname >> tsc) { // 添加输入判断条件,如果输入完毕就退出循环
        s = (LinkList)malloc(sizeof(LNode));
        s->name = tname;
        s->sc = tsc;
        s->sn = tsn;
        r->next = s;
        r = s;
    }
    r->next = NULL;
    return L;
}

void InsertLink(LinkList &L1, LinkList &L2) {
    L2->next = L1->next;
    L1->next = L2;
}

void display(LinkList L) {
    if (L == NULL || L->next == NULL) { // 当链表为空或只有头结点时退出函数
        return;
    }
    for (LNode *p = L->next; p != NULL; p = p->next)
        cout << p->sn << " " << p->name << " " << p->sc << endl;
    cout << endl;
}

希望这些修改能够帮助你解决问题。

赵4老师 05-15
  • 打赏
  • 举报
回复

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

68,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告