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

Linux下C程序编译正常但运行出现Segmentation Fault (core dump)求助

解决你的Segmentation Fault (Core Dump)问题

嘿,我看到你已经把问题范围缩小到文件写入部分了,咱们直接来揪出代码里的关键bug:

1. 致命的赋值/比较混淆错误

你代码里的这一行是核心问题:

if (f=NULL) {

这里你用了赋值运算符=,而不是判断相等的**==**。这就导致你直接把NULL塞给了文件指针f,后续不管你要往文件里写什么,都会因为访问空指针触发段错误——毕竟NULL指针指向的是无效内存地址呀。

正确的写法应该是:

if (f == NULL) {

2. 几个额外的小建议

  • 当文件打开失败时,除了打印"ERROR",最好直接终止程序(比如用exit(1),记得要包含<stdlib.h>头文件),别让程序带着空指针继续跑,不然还会出问题。
  • 你贴的代码里salt[] = "$1$........";后面好像没写完,确保后续使用这个salt的时候是完整有效的,避免其他潜在的奇怪问题。
  • 记得文件用完后一定要调用fclose(f)关闭它,不然会造成资源泄漏哦。

给你贴个修正后的开头示例,方便你参考:

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
#include <string.h>
#include <stdlib.h> // 要包含exit函数的头文件

int main(void) {
    FILE *f = fopen("shadow1.txt","w");
    if (f == NULL) {
        printf("ERROR: 打开文件失败\n");
        exit(EXIT_FAILURE); // 直接终止程序,避免后续错误操作
    }
    // 后续的salt定义、加密逻辑和文件写入操作...
    
    // 操作完成后关闭文件
    fclose(f);
    return 0;
}

对了,以后可以养成一个小习惯:把常量写在比较运算符的左边,比如if (NULL == f),这样如果不小心写成=,编译器会直接报错——毕竟你不能给常量赋值嘛,能提前避免这类低级错误~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:22