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

Linux下使用getline后出现Segmentation Fault问题求助

解决你的Segmentation Fault问题

首先,你的代码里的核心问题是未初始化的buffer指针导致的。我们来一步步拆解:

问题根源

char *buffer;这行代码只声明了一个指针,但没有给它赋值——它现在是一个野指针,指向内存里的随机地址。而getline函数的第一个参数有明确要求:如果传入的指针是NULL,它会自动为你分配足够的内存来存储输入;但如果是一个无效的野指针,getline会尝试去访问这个随机地址,直接触发段错误。

修复后的代码

只需要给buffer初始化为NULL,同时记得在程序结束前释放getline分配的内存(避免内存泄漏):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main (void) {
    bool condition = true;
    char *buffer = NULL; // 关键:初始化指针为NULL
    char *pseudo;
    size_t characters;
    size_t bufsize = 32;

    characters = getline(&buffer, &bufsize, stdin);
    // 可以加个判断,检查getline是否成功读取输入
    if (characters == -1) {
        fprintf(stderr, "读取输入失败\n");
        free(buffer); // 即使读取失败,也要释放可能分配的内存
        return 1;
    }

    pseudo = buffer; // 现在pseudo指向有效的内存地址

    while (condition == true) {
        // 这里可以安全地使用pseudo了,比如打印测试:
        printf("你的昵称是:%s", pseudo);
        condition = false; // 记得加终止条件,不然会无限循环
    }

    free(buffer); // 释放getline分配的内存
    return 0;
}

额外注意事项

  • getline返回的是读取到的字符数(包括换行符),如果返回-1表示读取失败(比如遇到EOF),这种情况要处理,避免后续操作无效指针。
  • 你原来的while循环没有终止条件,会无限运行,记得加上condition = false或者其他符合你游戏逻辑的终止逻辑。
  • pseudo只是指向buffer的指针,不需要单独释放,释放buffer就够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:56:10