栈数组为何导致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
相关产品推荐
相关产品推荐

