c - ubuntu gcc 中的段错误

标签 c pointers memory-management

#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    puts(ch);
    printf("%d\n",n);

}   

#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    printf("%d\n",n);
    puts(ch);

}   

在第一个中,段错误发生在 print(n) 处,而在第二个中,段错误发生在 puts(ch) 处。如果在声明 n 之后也使用 print(n) 则不会发生错误。

最佳答案

gets() 取消引用一个未初始化的指针,导致 undefined behaviour .

ch 分配内存并且不使用 gets()因为无法限制读取的字符数,这意味着可能会超出目标数组的范围进行写入。

示例使用 fgets() :

char ch[128];
if (fgets(ch, 128, stdin))
{
}

关于c - ubuntu gcc 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306608/

相关文章:

c - 两个格式说明符但只有一个参数

c++ - 可能的内存泄漏?

c++ - 为什么内存分配器不主动将释放的内存返回给操作系统?

memory-management - 在 Linux 中插入模块时出错 -- 1 无法分配内存

c - Visual Studio 的 C4028 警告(形式参数与声明不同)是虚假的吗?

c - Linux 和 Windows 套接字 API

c - 如何在一行中初始化这个数组?

c++ - 试图理解数组 C++ 的初始化

c++ - const 对象和成员指针的 const 正确性,构造函数漏洞

linux - ps 中的 RSS 内存总和小于实际使用的内存