#include <stdio.h>
#include <stdlib.h>
struct Person {
char* name;
int age;
};
void printit(struct Person *person) {
printf("%s %d \n",person->name,person->age);
}
int main(int argc, char** argv) {
struct Person *p = malloc(sizeof(struct Person));
printf("Enter name: ");
scanf("%s", p->name);
printf("Enter age: ");
scanf("%d", &(p->age));
printit(p);
free(p);
}
输入名称:asdf
分段错误:11
我不知道为什么会出现分段错误....
答案 0 :(得分:5)
您为struct
分配了内存。
但你没有在p->name
指向
将此添加到您的代码中。
struct Person *p = malloc(sizeof(struct Person));
p->name = malloc(100);
<小时/> 的修改
不应在结构中显式分配任何类型的空间。
当你做了
struct Person *p = malloc(sizeof(struct Person));
为name
和age
分配空间。但请注意name
是一个指针变量。已为指针变量分配空间,但不为指针指向的位置分配空间。
就像你做的那样
char* p;
创建变量p
,为其分配空间,但如果要使用它,则有两个选项。
1)要么指向一些现有的已分配内存
char* p;
char arr[10];
p = arr;
2)或者将内存分配到指向的位置。
char* p = malloc(sizeof(char));