C语言编译错误:指针commonData_p使用时未初始化相关问题咨询
操作建议
你必须显式初始化commonData_p指针,未初始化的野指针不允许访问指向的结构体成员,有两种常用的初始化方案:
- 指向已有的栈/全局结构体实例:你代码中定义结构体时同步声明了全局的
structS类型同名变量,可以直接赋值:
structS* commonData_p = &structS;
- 堆上申请内存空间:需要引入
stdlib.h头文件,使用完后需释放内存避免泄漏:
#include <stdlib.h> // 初始化部分 structS* commonData_p = (structS*)malloc(sizeof(structS)); // 给结构体成员赋值后再使用,malloc申请的内存默认是未初始化状态 commonData_p->noOfScgsToTrace = 0; // 使用完后释放 free(commonData_p); commonData_p = NULL;
问题1解答
C语言的局部指针变量定义后如果没有显式赋值,存储的是随机的内存地址,属于野指针,直接通过->访问指向的结构体成员属于非法内存访问,编译器会在编译阶段拦截这类明显的风险操作,因此抛出未初始化的报错。
问题2解答
不会判定为垃圾值。你在定义noOfScgToTrace时已经显式初始化为0,就算后续的赋值操作未正常执行,变量会保留初始值0,for循环的判断条件i < 0永远不成立,循环不会执行,不会出现垃圾值访问的问题。
内容的提问来源于stack exchange,提问作者revt
相关产品推荐
相关产品推荐

