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

C语言结构体与指针代码编译错误排查及修正方法

C语言结构体指针代码编译错误修复

问题定位

  • 语法错误:结构体类型定义处存在关键字拼写错误,标准C语言类型定义关键字为typedef,原代码写为typedf(缺失字母e),编译器无法识别该标识,是编译失败的直接原因。
  • 规范问题:原代码对malloc申请的堆内存未做释放处理,存在内存泄漏风险;C语言环境下malloc返回的void*类型可隐式转换为对应结构体指针,无需强制类型转换,原代码的强转写法无语法错误但属于冗余写法。
  • 逻辑验证:原代码中除上述拼写错误外,其余指针偏移、二级指针解引用、结构体成员访问的逻辑均符合C语言语法规则,不存在语法层面的问题。

修正后可正常编译运行的代码

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

// 修正typedef关键字拼写
typedef struct
{
    int a;
    int b;
} STR;

int main(void)
{
    STR *arr[4];
    STR **ptr = arr;
    for(int i = 0; i < 4; i++)
    {
        arr[i] = malloc(sizeof(STR));
        (*arr[i]).a = i + 7;
        (**(ptr + i)).b = i + 3;
    }
    printf("%d\n", ptr[2]->a);
    printf("%d", (*(arr + 3))->b);

    // 补充堆内存释放逻辑,避免内存泄漏
    for(int i = 0; i < 4; i++)
    {
        free(arr[i]);
    }
    return 0;
}

运行结果

代码执行后输出如下:

9
6

注:如果使用C89标准编译,需要把for循环中声明的int i提前到函数开头位置;C99及之后的标准支持在for循环初始化块内声明变量,可直接编译通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:57:35