C动态分配结构体,使用scanf时出现错误


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

nameage分配空间。但请注意,name是一个指针变量。已为指针变量分配了空间,但未为指针指向的位置分配空间。

就像你这样做一样

char* p;

变量p已创建,为其分配空间,但如果要使用它,则有两个选项。

1(要么让它指向一些现有的分配内存

char* p;
char arr[10];
p = arr;

2(或者将内存分配到它将指向的位置。

char* p = malloc(sizeof(char));

最新更新