You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体数组指针使用异常导致程序无法运行,该如何解决?

代码故障原因与修复方案

核心问题分析

  • 结构体指针数组未初始化内存:代码中定义的EXAM *exams[5]是包含5个EXAM类型指针的数组,所有指针默认是野指针,未指向任何合法分配的结构体内存空间,直接访问exams[i]->xxx成员会触发内存访问异常。
  • 结构体内字符串指针未分配缓冲区:EXAM结构体中的courseName、courseDate均为char类型指针,没有预先分配足够存储输入字符串的内存缓冲区,直接通过scanf写入内容同样会触发非法内存访问。

修复方案

可以直接将指针数组改为结构体数组,同时将结构体内部的char指针改为固定长度的字符数组,修改后代码如下:

#include <stdio.h>

typedef struct {
    // 改为固定长度字符数组,直接分配存储空间
    char courseName[100];
    char courseDate[20];
    double grade;
}EXAM;

int main() {

    double averageGrade = 0;
    // 改为结构体数组,直接分配5个EXAM结构体的内存空间
    EXAM exams[5];

    for(int i = 0; i < 5; i++){
        printf("Please enter course name:\n");
        scanf("%s", exams[i].courseName);

        printf("Please enter course date:\n");
        scanf("%s", exams[i].courseDate);

        printf("Please enter course grade:\n");
        scanf("%lf", &exams[i].grade);

        averageGrade += exams[i].grade;
    }

    averageGrade /= 5;
    printf("Your average grade is: %.1lf.", averageGrade);

    return 0;
}

如果需要保留指针的用法,需要手动调用malloc为每个结构体指针和字符串指针分配内存,使用结束后调用free释放即可。

内容的提问来源于stack exchange,提问作者user15975143

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:24:01