今生情谊 2022-10-12 02:35 采纳率: 66.7%
浏览 27
已结题

调试运行出现指针异常


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//结构体嵌套二级指针练习
//结构体设计
struct TeaCher {
    //老师姓名
    char *name;

    //老师带的学生姓名数组
    char **Studets;



};

void allocateSpace(struct TeaCher ***teacherArray) {
    
    if (teacherArray == NULL)
    {
        return;
    }
    //堆区分配内存
     struct TeaCher ** ts = malloc(sizeof(struct TeaCher *) * 3);
    //数据赋值
    
    for (int i = 0; i < 3; i++)
    {
        ts[i] = malloc(sizeof(struct TeaCher));//给老师分配内存
        ts[i]->name = malloc(sizeof(char) * 64);//给老师姓名属性分配内存
        sprintf(ts[i]->name, "TeaCher_%d", i + 1);//给老师姓名赋值
        ts[i]->name = malloc(sizeof(char *) * 4);//给老师带领学生数组分配内存
        //给学生姓名赋值

        for (int j = 0; j < 4; j++)
        {
            ts[i]->Studets[j] = malloc(sizeof(char)* 64);
            sprintf(ts[i]->Studets[j], "%s_studet_%d", ts[i]->name, j + 1);
        }
    
    }


    //建立关系
    *teacherArray = ts;

}

//打印操作
void printTeacharArray(struct TeaCher ** teacherArray) {

    for (int i = 0; i < 3; i++)
    {
        printf("%s\n", teacherArray[i]->name);//老师姓名
        for (int j = 0; j < 4; j++)
        {
            printf("   %s\n",teacherArray[i]->Studets[j]);
        }

    }

}

void test01() {
    //老师数组创建
    struct TeaCher ** teacherArray = NULL;

    //分配内存
    allocateSpace(&teacherArray);
    
    //打印所有老师和学生的信息
    printTeacharArray(teacherArray);

}


int main() {

    test01();

    system("pause");
    return EXIT_SUCCESS;
}

调试发现一个

img

这里报错

img


需要怎么解决?

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-10-12 10:45
    关注

    改动处见注释,供参考:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    //结构体嵌套二级指针练习
    //结构体设计
    struct TeaCher {
        //老师姓名
        char* name;
        //老师带的学生姓名数组
        char** Studets;
    };
    
    void allocateSpace(struct TeaCher** teacherArray) {
                            //void allocateSpace(struct TeaCher*** teacherArray) 修改
    
                            //if ((*teacherArray) == NULL) 修改
                            //{
                            //    return;
                            //}
        //堆区分配内存
        struct TeaCher* ts = (struct TeaCher*)malloc(sizeof(struct TeaCher) * 3);
                             //struct TeaCher** ts = malloc(sizeof(struct TeaCher*) * 3); 修改
        //数据赋值
        for (int i = 0; i < 3; i++)
        {
                             //ts[i] = malloc(sizeof(struct TeaCher));//给老师分配内存   修改
            ts[i].name = (char*)malloc(sizeof(char) * 64);//给老师姓名属性分配内存
                            //ts[i]->name = ()malloc(sizeof(char) * 64);  //修改
            sprintf(ts[i].name, "TeaCher_%d", i + 1);//给老师姓名赋值
                            //sprintf(ts[i]->name, "TeaCher_%d", i + 1);//修改
            ts[i].Studets = (char**)malloc(sizeof(char*) * 4);//给老师带领学生数组分配内存
                           //ts[i]->name = malloc(sizeof(char*) * 4); // 修改
            //给学生姓名赋值
    
            for (int j = 0; j < 4; j++)
            {
                ts[i].Studets[j] = (char *)malloc(sizeof(char) * 64);
                           //ts[i]->Studets[j] = malloc(sizeof(char) * 64); 修改
                sprintf(ts[i].Studets[j], "%s_studet_%d", ts[i].name, j + 1);
                          //sprintf(ts[i]->Studets[j], "%s_studet_%d", ts[i]->name, j + 1);  修改
            }
        }
        //建立关系
        (*teacherArray) = ts;
    }
    
    //打印操作
    void printTeacharArray(struct TeaCher* teacherArray) {
                         //void printTeacharArray(struct TeaCher** teacherArray)  修改
    
        for (int i = 0; i < 3; i++)
        {
            printf("%s\n", teacherArray[i].name);//老师姓名
                         //printf("%s\n", teacherArray[i]->name);
            for (int j = 0; j < 4; j++)
            {
                printf("   %s\n", teacherArray[i].Studets[j]);
                        //printf("   %s\n", teacherArray[i]->Studets[j]);
            }
        }
    }
    void test01() {
        //老师数组创建
        struct TeaCher* teacherArray = NULL;
                       //struct TeaCher** teacherArray = NULL;  修改
        //分配内存
        allocateSpace(&teacherArray);
        //打印所有老师和学生的信息
        printTeacharArray(teacherArray);
    }
    int main() 
    {
        test01();
        //system("pause");
        return EXIT_SUCCESS;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 已采纳回答 10月12日
  • 创建了问题 10月12日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来