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

C语言项目因指针、头文件及结构体数组问题崩溃求助

排查你的C语言项目崩溃问题

让我帮你一步步拆解这个项目里导致崩溃的关键问题,还有一些潜在的代码疏漏:

1. 数组越界访问——最直接的崩溃元凶

你定义的结构体数组是s_persona personaX[5];,这意味着数组里只有5个元素,合法索引范围是0到4。但你的循环条件写的是i<=5,当i=5时,你试图访问personaX[5]——这已经超出了数组分配的内存范围,属于典型的数组越界访问,会直接触发内存非法访问,导致程序崩溃。

修复很简单,把循环条件改成:

for(i=0;i<5;i++){

2. 函数调用的指针传递错误

你调用caricamento(&personaX[5]);时,传递的是数组第6个元素的地址(personaX[5]本身就是越界的位置),这完全不是你想要传递的数组首地址。正确的做法是传递数组的起始地址,有两种等价写法:

caricamento(personaX);  // 数组名本身就是指向首元素的指针
// 或者更明确的写法
caricamento(&personaX[0]);

3. 头文件的函数原型缺失

你的struct.h里只写了头文件保护宏,却没声明caricamento函数的原型,也没把结构体定义放到头文件里。这会导致编译器无法检查函数调用的参数类型是否匹配,进而引发指针类型不兼容的问题,也是崩溃的潜在诱因。

你需要把struct.h补全:

#ifndef STRUCT_H_
#define STRUCT_H_

typedef struct{
 char nome[29];
 char cognome[28];
 int et;  // 建议改成eta,语义更清晰,不过不影响功能
}s_persona;

// 声明caricamento函数的原型,参数是结构体指针
void caricamento(s_persona *arr);

#endif // STRUCT_H_

同时,别忘了在main.c开头加上#include "struct.h"——你现在的代码里没包含这个头文件,这也是个大问题。

4. 其他非崩溃但值得优化的点

  • system("pause")是Windows平台专属代码,如果想让程序跨平台运行,建议换成标准C的输入等待,比如getchar();
  • 结构体里的et变量名改成eta会更直观,避免歧义

把这些问题都修复后,你的程序应该就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:02