竹叶风轻敲 2024-04-23 20:30 采纳率: 65.2%
浏览 1
已结题

为啥报核心已存储啊save函数应该没错吧

img


为啥报核心已存储啊,没使用save函数能打印出来顶点信息,使用save保存看一下,结果报核心已存储的错,save函数应该没错吧

  • 写回答

5条回答 默认 最新

  • Kwan的解忧杂货铺 2024-04-23 20:30
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题分析:

    该代码段中报错“核心已存储”是因为程序运行过程中访问了禁止访问的内存地址,导致程序崩溃。

    代码中没有看出问题的地方,可能是由于未初始化的变量或变量越界等问题导致的。程序中有一个指向自身的顶点,这也有可能是导致问题的原因。

    解决方案:

    1. 检查数组越界

    程序中使用了数组,可能出现越界问题。可以使用边界值测试等方法进行检查。

    1. 注意变量是否初始化

    程序中使用的变量是否已经初始化,可能会导致问题。可以在程序中添加初始化步骤。

    1. 检查指针是否为空

    程序中使用了指针,可能会导致指针为空的问题。可以在使用指针之前先进行非空判断。

    1. 检查内存泄漏

    可能是内存泄漏导致的问题,可以使用工具进行检查。例如Unix系统中的valgrind工具。

    1. 优化代码

    程序中不规范的代码可能导致问题。可以通过检查代码规范等方式来进行优化。

    修改后的正确代码:

    因为无法确定具体是哪里出问题,因此以下代码仅为可参考修改的示例代码。具体修改步骤需要根据具体问题进行修改。

    1. 将结构体中的char数组name修改为char指针name,并在初始化时为其分配空间。

    2. 在for循环中添加边界检查。

    3. 在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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度