C语言报错dereferencing pointer to incomplete type ‘struct Array’如何解决
问题修复方案
错误原因
- 编译报错的直接原因:
function.c作为独立编译单元,没有引入Header.h,编译器处理该文件时无法识别struct Array的完整结构定义,因此判定为不完整类型,无法访问其成员。main.c引入头文件不影响function.c的独立编译流程 - 隐藏运行错误:
newArray中仅声明了struct Array类型指针,未分配实际内存空间就直接解引用,属于野指针操作,即使编译通过也会触发运行时崩溃,且原函数缺少返回值不符合定义要求。
修复步骤
- 在
function.c头部引入自定义头文件
#include "Header.h"
- 完善
newArray函数的内存分配、赋值、返回逻辑,修改后的完整function.c代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "Header.h" // 新增头文件引入 struct Array *newArray(unsigned int size, unsigned int capacity ) { // 申请结构体对应的堆内存 struct Array *array = (struct Array *)malloc(sizeof(struct Array)); // 内存分配校验,避免空指针操作 if (array == NULL) { perror("malloc failed"); return NULL; } // 成员赋值 array->size = size; array->cap = capacity; array->data = 0; // 其余成员建议初始化,避免读取脏数据 // 返回合法的结构体指针 return array; }
- main.c调用后即可正常获取赋值后的size成员,示例调用逻辑:
#include "Header.h" int main() { struct Array *arr = newArray(5, 20); if (arr != NULL) { printf("size值为:%u\n", arr->size); // 输出为5,符合需求 // 业务逻辑执行完记得释放内存避免泄漏 free(arr); } return 0; }
内容的提问来源于stack exchange,提问作者user15094140
相关产品推荐
相关产品推荐

