qq_38801587 2017-05-15 14:42 采纳率: 0%
浏览 708

新手 求大神解决。C++问题

#include
using namespace std;
struct student {
int xuehao;
int cj;
char name[20];
};
struct jiedian {
student date;
jiedian *next;
};
void lianbiao(jiedian *L, int n, void(*input) (student *S));
void input(student *S);
void shanchu(jiedian *P);
void printf(student *N1);
void listlianbiao(jiedian *N, void(*printf)(student *N1));
int main() {
int n;
cout << "学生个数:\n";
cin >> n;
jiedian L;
L.next = 0;
lianbiao(&L, n, input);
listlianbiao(&L, printf);
shanchu(&L);
}
void lianbiao(jiedian *L, int n,void(*input) (student *S)){
L = new jiedian;
for (; n > 0; n--) {
jiedian *s;
s = new jiedian;
input(&(s->date));
s->next = L->next;
L->next = s;
}

}
void input(student *S) {
cout << "输入学生的学号:\n";
cin >> S->xuehao;
cout << "学生的姓名:\n";
cin >> S->name;
cout << "学生成绩:\n";
cin >> S->cj;
}
void shanchu(jiedian *P) {
jiedian *Q, *W = P;
while (W==NULL) {
Q = W->next;
delete W;
W = Q;
}
delete P;
}
void printf(student *N1){
cout << "输入学生的学号:" << N1->xuehao;
cout << "学生的姓名:" << N1->name;
cout << "学生成绩:"<cj;
}
void listlianbiao(jiedian *N, void(*printf)(student *N1)) {
jiedian *P1;
P1 = N->next;
while (P1 == NULL) {
printf(&(P1->date));
P1 = P1->next;
}
}
这里的*N为什么是空指针
怎么解决这里存在的问题呢。我并没有发现哪错了啊?

  • 写回答

2条回答 默认 最新

  • Chin__Lee 2017-05-15 15:41
    关注

    首先你链表创建时就有问题,L 永远指向最新的一个节点,其他的节点都丢了,还有,链表首先要保存好根节点。
    最根本的问题在于你主函数创建的L不是指针,你只是把变量地址传进去了,但你在lianbiao这个函数中又创建了一次变量,并且把地址赋值给L原先的地址,这没有意义
    但是回到主函数,L的地址还是原来的地址,根本没有更改,所以之前做的都是白的。
    还有删除的部分,你既然L不是new出来的,当然也不能用delete来管理。
    还有你的while循环判断P1 == NULL逻辑有问题吧,怎么能是空的时候才进呢,应该是非空才对吧。

    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?