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
相关产品推荐
相关产品推荐

