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

C语言指针赋值引发EXC_BAD_ACCESS错误的原因咨询

错误根因分析

你代码中sub->str = s触发EXC_BAD_ACCESS的核心原因是:ind *sub是未初始化的野指针,未指向合法的struct Index结构体内存空间。

  • 你仅声明了ind类型的指针变量sub,没有为它分配对应的结构体内存,此时sub存储的是栈上的随机垃圾值,指向的内存地址不属于当前进程可合法读写的范围。
  • sub->str操作的本质是先对sub指针解引用(*sub),拿到它指向的结构体实例后再修改str成员的值。对野指针执行解引用写操作,直接触发了非法内存访问异常,和你后续char*指针赋值的语法正确性无关。
修复方案

有两种常用修复方式:

方案1:栈上分配结构体实例

无需手动管理内存,适合生命周期仅在当前函数内的场景:

int fxn_one(char *s)
{
    ind sub; // 直接声明结构体实例,栈上自动分配内存
    sub.str = s;
    // 业务逻辑处理
    return 0;
}

方案2:堆上动态分配内存

适合需要跨函数使用结构体的场景,使用完需手动释放避免内存泄漏:

int fxn_one(char *s)
{
    ind *sub = malloc(sizeof(ind));
    // 必须判断动态内存是否分配成功
    if (sub == NULL) {
        return -1;
    }
    sub->str = s;
    // 业务逻辑处理
    // 不需要使用sub时主动释放内存
    free(sub);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:39:04