#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
我不知道为什么会出现段错误......
最佳答案
您为 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));
关于C动态分配结构,使用scanf时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160688/