C在使用scanf时动态分配struct,seg fault

时间:2015-12-08 16:13:10

标签: c struct segmentation-fault 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

我不知道为什么会出现分段错误....

1 个答案:

答案 0 :(得分:5)

您为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));