在Linux下进行C语言编程时,遇到一个错误,网上说的都很复杂,看都看不懂,其实就是你对指针进行直接操作之前,没有对它进行分配地址空间。
所以在运行的时候,它不知道在那里操作(比如赋值,取值),所以才报了这个错误。
在C语言中,定义一个指针变量时,系统不会像在定义基本数据类型一样自动为指针分配地址空间的,所以我们在定义指针变量时要手动为它分配一个地址空间
![img_e7a96aa7953f99d17d83054306e996b7.png](https://i-blog.csdnimg.cn/blog_migrate/7dd38b458ca76d1d178b272e27f7c0b3.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](https://i-blog.csdnimg.cn/blog_migrate/a979e1d3975ef2196563212c4a4d8b9f.png)
image.png