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

栈数组为何导致getline函数触发段错误?

段错误原因及修复方案

问题原因

  • 核心问题是未初始化text和text_size:getline的使用规则明确:如果传入的text指针为NULL,函数会自动分配内存并更新text和text_size的值;但如果text不为NULL,它必须指向一块已分配的合法内存,且text_size要准确对应这块内存的大小。
  • 你的代码中,text和text_size都是栈上的局部变量,默认会被填充随机垃圾值,而非预期的NULL和0。当存在变长数组array[count]时,栈上的垃圾值恰好让getline误判text指向合法内存,实际却是非法地址,触发段错误;去掉数组后,栈上的垃圾值偶然为NULL,代码侥幸运行,但这不是正确的解决方式,本质问题依然存在。

修复方法

给text和text_size做初始化,让getline正确分配内存,同时记得用完后释放内存避免泄漏:

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

int main(){
    int count = 2;
    int array[count];
    char *text = NULL; // 初始化text为NULL,让getline自动分配内存
    size_t text_size = 0; // 初始化text_size为0
    printf("Please enter test text: ");
    getline(&text, &text_size, stdin);
    printf("%s\n", text);
    free(text); // 释放getline分配的内存
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:42:50