Linux C-完美解决segmentation fault (core dumped)

简介: 在Linux下进行C语言编程时,遇到一个错误,网上说的都很复杂,看都看不懂,其实就是你对指针进行直接操作之前,没有对它进行分配地址空间。所以在运行的时候,它不知道在那里操作(比如赋值,取值),所以才报了这个错误。

在Linux下进行C语言编程时,遇到一个错误,网上说的都很复杂,看都看不懂,其实就是你对指针进行直接操作之前,没有对它进行分配地址空间。
所以在运行的时候,它不知道在那里操作(比如赋值,取值),所以才报了这个错误。

在C语言中,定义一个指针变量时,系统不会像在定义基本数据类型一样自动为指针分配地址空间的,所以我们在定义指针变量时要手动为它分配一个地址空间

img_e7a96aa7953f99d17d83054306e996b7.png
image.png

出错代码

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

#define OVERFLOW 0
#define OK  1
#define LIST_INIT_SIZE  100
#define LISTINCREMENY  10
typedef struct{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}student;

int main()
{
    student* stu=NULL;
    stu->age=18;
    strcpy(stu->name,"李四");
    strcpy(stu->no,"20144834638");
    strcpy(stu->sex,"男");

    printf("name:%s, no: %s, sex: %s, age: %d",stu->name,stu->no,stu->sex,stu->age);
    free(stu);

    return 0;
}

解决办法:
为指针变量分配一个地址空间,完美解决。

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

#define OVERFLOW 0
#define OK  1
#define LIST_INIT_SIZE  100
#define LISTINCREMENY  10
typedef struct{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}student;

int main()
{
    student* stu=NULL;
    stu=(student *)malloc(LIST_INIT_SIZE*sizeof(student));  //为指针变量分配地址空间
    stu->age=18;
    strcpy(stu->name,"李四");
    strcpy(stu->no,"20144834638");
    strcpy(stu->sex,"男");

    printf("name:%s, no: %s, sex: %s, age: %d",stu->name,stu->no,stu->sex,stu->age);
    free(stu);

    return 0;
}

运行结果:已经可以正常操作指针了


img_4978f8d8e9f7afa6523d5f88714b2fc3.png
image.png
目录
相关文章
|
存储 NoSQL Linux
linux积累-core文件是干啥的
核心文件是Linux系统在程序崩溃时生成的重要调试文件,通过分析核心文件,开发者可以找到程序崩溃的原因并进行调试和修复。本文详细介绍了核心文件的生成、配置、查看和分析方法
1859 6
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
8116 6
|
存储 NoSQL 安全
深入Linux Core文件生成与自定义命名规则
深入Linux Core文件生成与自定义命名规则
577 2
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
242 0
|
NoSQL Linux C++
Linux C/C++ gdb调试core文件
Linux C/C++ gdb调试core文件
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
890 0
|
Linux 程序员 Shell
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
1418 0
|
9月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
986 1
二、Linux文本处理与文件操作核心命令
|
9月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
588 137
|
9月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1532 58