编辑
#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));