为啥报核心已存储啊,没使用save函数能打印出来顶点信息,使用save保存看一下,结果报核心已存储的错,save函数应该没错吧
![](https://profile-avatar.csdnimg.cn/a011d0908e98402895991216401d63d4_2301_77331351.jpg!4)
为啥报核心已存储啊save函数应该没错吧
为啥报核心已存储啊,没使用save函数能打印出来顶点信息,使用save保存看一下,结果报核心已存储的错,save函数应该没错吧
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- Kwan的解忧杂货铺 2024-04-23 20:30关注
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5问题分析:
该代码段中报错“核心已存储”是因为程序运行过程中访问了禁止访问的内存地址,导致程序崩溃。
代码中没有看出问题的地方,可能是由于未初始化的变量或变量越界等问题导致的。程序中有一个指向自身的顶点,这也有可能是导致问题的原因。
解决方案:
- 检查数组越界
程序中使用了数组,可能出现越界问题。可以使用边界值测试等方法进行检查。
- 注意变量是否初始化
程序中使用的变量是否已经初始化,可能会导致问题。可以在程序中添加初始化步骤。
- 检查指针是否为空
程序中使用了指针,可能会导致指针为空的问题。可以在使用指针之前先进行非空判断。
- 检查内存泄漏
可能是内存泄漏导致的问题,可以使用工具进行检查。例如Unix系统中的valgrind工具。
- 优化代码
程序中不规范的代码可能导致问题。可以通过检查代码规范等方式来进行优化。
修改后的正确代码:
因为无法确定具体是哪里出问题,因此以下代码仅为可参考修改的示例代码。具体修改步骤需要根据具体问题进行修改。
-
将结构体中的char数组name修改为char指针name,并在初始化时为其分配空间。
-
在for循环中添加边界检查。
-
在save函数中的if语句中将 “=”修改为“==”。
具体代码如下:
#define numers(max) ((max+1)*max/2) typedef struct vertex { char* name; }Vertex; typedef struct matrixgraph { int mat[numers(10)]; int vertexnum; int edgenum; Vertex num[10]; }Graph; Graph* init(Graph* ptr) { printf("input vertenum and edgenum are separated by sp\n"); scanf("%d %d", &ptr->vertexnum, &ptr->edgenum); memset(ptr->mat, 0, ptr->vertexnum*4); for(int i=0;i<ptr->vertexnum;i++) { ptr->num[i].name = (char*)malloc(sizeof(char)*10); scanf("%s",ptr->num[i].name); } return ptr; } void save(Graph* s) { FILE* ptr = fopen("Graph.txt","w"); if(ptr==NULL) printf("error:%s",strerror(errno)); for(int i=0;i<s->vertexnum;i++) { fprintf(ptr,"%s ",s->num[i].name); } fclose(ptr); } int main() { Graph s; init(&s); save(&s); for(int i=0;i<s.vertexnum;i++) { free(s.num[i].name); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 程序实在不会写,要秃了
- ¥15 pycharm导入不了自己的包
- ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
- ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
- ¥15 关于R语言单因素与多因素线性回归的平均值
- ¥15 服务器清除BIOS之后引导不了
- ¥15 CPLEX用OPL编写的混合整数线性优化问题。
- ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
- ¥15 前端预览docx文件,文件从后端传送过来。
- ¥15 层次聚类和蛋白质相似度