【为啥】程序开始运行就停止工作

_Looong_ 2016-10-20 08:12:21
#include<malloc.h>
#include<iostream>
#include<stdio.h>
#include<string>
#include<stdlib.h>


using namespace std;

typedef struct
{
string data[50];
int length;

}sqlist;
struct student
{
int num;
string name;
float score1;
float score2;
float score3;
};
student stu[2];

void creatlist(sqlist *l,struct student stu) ;
void DispList(sqlist *l);
void unionlist(sqlist *,sqlist *,sqlist *&);


void main()
{
sqlist *sqa=NULL, *sqb=NULL, *sqc;
cout<<"请输入学生信息: 学号 姓名 分数1 分数2 "<<endl;
cin>>stu[0].num>>stu[0].name>>stu[0].score1>>stu[0].score2;
creatlist(sqa,stu[0]);
cout<<"请输入学生信息:/n 学号 姓名 分数1 分数3 "<<endl;
cin>>stu[1].num>>stu[1].name>>stu[1].score1>>stu[1].score3;
creatlist(sqb,stu[1]);


unionlist(sqa,sqb,sqc);
DispList(sqc);
}

void creatlist(sqlist *l,struct student stu)
{
l=(sqlist *)malloc(sizeof(sqlist));
l->data[0]=stu.num;
l->data[1]=stu.name;
l->data[2]=stu.score1;
l->data[3]=stu.score2;
}

void DispList(sqlist *l)
{
int i;
for(i=0;i<l->length;i++)
{
printf("%d ",l->data[i]);
}
printf("\n");
}
void unionlist(sqlist *a,sqlist *b,sqlist *&c)
{
c=(sqlist *)malloc(sizeof(sqlist));
int i,j=0,k=0,l=0;
c->length=0;
for(i=0;i<a->length;i++)
{
c->data[i]=a->data[i];
c->length++;
}
while(j<b->length)
{

c->data[i]=b->data[j];
i++;
c->length++;

}
}



...全文
431 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-10-21
  • 打赏
  • 举报
回复
你的creatlist函数参数是按值传递的,所以你在函数中分配的空间并不会影响到主函数中的sqa creatlist 等函数中的赋值两边类型都不同 DispList 中 printf("%d ",l->data[i]); %d是用来显示整型的,不是string类型
小灸舞 2016-10-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
ipqtjmqj 2016-10-21
  • 打赏
  • 举报
回复
内存越界了,你可以在程序中添加一些printf输出语句,然后观察到哪里还可以有输出,到哪里写的输出语句没被调用,出错的地方就找到了

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧