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

C语言报错dereferencing pointer to incomplete type ‘struct Array’如何解决

问题修复方案

错误原因

  • 编译报错的直接原因:function.c作为独立编译单元,没有引入Header.h,编译器处理该文件时无法识别struct Array的完整结构定义,因此判定为不完整类型,无法访问其成员。main.c引入头文件不影响function.c的独立编译流程
  • 隐藏运行错误:newArray中仅声明了struct Array类型指针,未分配实际内存空间就直接解引用,属于野指针操作,即使编译通过也会触发运行时崩溃,且原函数缺少返回值不符合定义要求。

修复步骤

  1. 在function.c头部引入自定义头文件
#include "Header.h"
  1. 完善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;
}
  1. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:06