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

MacBook M1芯片运行C代码出现Segmentation fault 11错误求助

Segmentation fault 11 问题排查与修复(M1 MacBook环境)

你的代码出现Segmentation fault 11的核心原因并非M1芯片或VSCode设置问题,而是文件操作未做错误检查,同时存在其他潜在内存风险,以下是具体分析和修复方案:

直接触发段错误的原因:文件打开失败未处理

在main函数中,你调用fopen("farmacie.txt", "r")打开文件,但没有检查返回值。如果文件不存在、路径错误或无读取权限,fopen会返回NULL。后续将NULL传入citireFisier函数并执行fscanf,会直接导致空指针访问,触发段错误。

其他潜在问题

  • 所有malloc调用未检查返回值:如果内存分配失败,malloc返回NULL,后续对denumire或salarii的操作也会引发段错误。
  • 未释放动态分配的内存:代码中多处使用malloc但没有对应的free,会造成内存泄漏。

修复方案

1. 添加文件打开检查

在main中添加判断,确保文件成功打开:

int main()
{
    FILE *file = fopen("farmacie.txt", "r");
    // 检查文件是否成功打开
    if (file == NULL) {
        perror("无法打开文件");
        exit(EXIT_FAILURE);
    }
    struct Farmacie fis = citireFisier(file);
    afisareFarmacie(fis);
    
    // 释放动态分配的内存,避免泄漏
    free(fis.denumire);
    free(fis.salarii);
    fclose(file); // 关闭文件
}

2. 为所有malloc添加错误检查

以initializare函数为例,修改后:

struct Farmacie initializare(const char *denumire, int nr_angajati, float *salarii, int an_infiintare)
{
    struct Farmacie f;
    f.nr_angajati = nr_angajati;
    f.an_infiintare = an_infiintare;
    
    f.denumire = malloc((strlen(denumire) + 1) * sizeof(char));
    if (f.denumire == NULL) {
        perror("分配denumire内存失败");
        exit(EXIT_FAILURE);
    }
    strcpy(f.denumire, denumire);
    
    f.salarii = malloc(sizeof(float) * nr_angajati);
    if (f.salarii == NULL) {
        perror("分配salarii内存失败");
        free(f.denumire); // 已分配的内存要释放
        exit(EXIT_FAILURE);
    }
    for (int i = 0; i < nr_angajati; i++)
    {
        f.salarii[i] = salarii[i];
    }
    return f;
}

同理,copiere和citireFisier函数中的malloc都需要添加类似检查。

3. 确保文件路径正确

  • 如果使用VSCode运行,确认farmacie.txt位于当前工作目录(可通过终端执行pwd查看当前路径,将文件放在该目录下)。
  • 也可以使用绝对路径,比如fopen("/Users/你的用户名/Desktop/farmacie.txt", "r")。

测试建议

  1. 创建符合格式的farmacie.txt文件,示例内容:
FarmacieCentrala 3 4500.50 3800.00 5200.75 2005
  1. 编译时建议添加警告参数,比如gcc -Wall -Wextra your_code.c -o farmacie,帮助提前发现潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:52