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

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

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

image.png

出错代码

#include 
#include 
#include 

#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 
#include 
#include 

#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;
}

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


image.png

你可能感兴趣的:(Linux C-完美解决segmentation fault (core dumped))