标题:【萌新提问】这个函数哪里有问题?为什么一运行完这个函数就会显示main.exe ...
只看楼主
萌新小白qwq
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2019-8-21
结帖率:100%
已结贴  问题点数:20 回复次数:7 
【萌新提问】这个函数哪里有问题?为什么一运行完这个函数就会显示main.exe已停止运行
rt.
更改了好几种方法根本解决不掉实在是心力交瘁了。
大概是一个链表打印的函数。
整个函数可以正常运行,该显示的都会显示出来,但是运行完后就会直接崩溃显示main.exe已停止运行。
因为主函数每次都是运行到这里就崩溃所以我刻意单独测试过这个函数发现问题确实是出在这个函数上...
所以只放了这个函数没贴主函数,也是为了看着方便,不是没有主函数orzzzz
纠结两天了根本无解我真的不造要怎么办了,还请各位大神帮帮萌新吧萌新要秃了....
感激不尽!
程序如下...






#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>


struct student{                                          /*   定义学生信息的结构体  */
    int cla,math,eng,str,tot,ave;
    _int64 num;
    char name[10];
    struct student *next;
   };


  
void printlist(struct student *phead){
  int no=1;
  struct student *p;
  p=(struct student*)malloc(sizeof(struct student));
  p=phead->next;
  printf("\n      ·序号    学号          姓名      班级   高数      英语      数据结构  总分      平均·");
  
  if(p){
  while(p!=NULL){
    printf("\n      ·%d    %I64d   %s   %d   %d   %d   %d   %d    %d·\n",no,p->num,p->name,p->cla,p->math,p->eng,p->str,p->tot,p->ave);
   
    no=no+1;
    p=p->next;
  }
 }
  else{
      printf("\n----------------------暂无数据------------------------\n");
  };
  printf("\n");
}
搜索更多相关主题的帖子: 函数 运行 显示 struct student 
2019-08-21 19:13
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:7 
p=phead->next;换成p=phead;试试

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-08-21 23:13
萌新小白qwq
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2019-8-21
得分:0 
回复 2楼 wufuzhang
还是不行...
2019-08-22 15:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
虽然代码一坨糟,但导致“main.exe已停止运行”的根源肯定不在这里。

建议你检查一下 name 是否溢出,及最后的 next 是否正确设置了 NULL。
next 是否指向了未分配的内存,next 是否指向了 局部 变量。
2019-08-22 16:32
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
得分:7 
   int no=1;
1  struct student *p;
2  p=(struct student*)malloc(sizeof(struct student));
3  p=phead->next;

函数开头处:
1,声明了一个指向struct student结构的指针p
2,分配了一段内存,大小为结构struct student,并将其地址赋值给p
3,将phed->next中的某个strct student结构地址赋值给p
经过此处操作,将导致一段已分配空间失去控制(丢失地址),如果这个步骤多次重复(该函数频繁调用),那么后果无需多言,这就像占着茅坑不如厕然后把公共厕所全占了一样

其次这个函数并没有对传入参数进行有效的检测,如果传入的为null或者无意义地址,那么p将成为无效指针或者野指针,如果是这样那么将当场爆炸

从贴出的代码来看,最明显就是这两问题,其他问题自己慢慢查
2019-08-23 09:26
萌新小白qwq
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2019-8-21
得分:0 
回复 5楼 Mr_doge
我去试试看...
2019-08-27 15:20
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
把p=(struct student*)malloc(sizeof(struct student));这行删了试一下
2019-08-27 18:17
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
为什么不把代码都贴出来,虽然问题出在这里,但原因很可能在别处,如果你的代码很保密,不能公开,那别人就没法帮你了,只有你自己解决,即使你心力交瘁也是没有办法。
2019-08-27 22:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496501-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.221845 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved