2015-12-08 41 views
0
#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ç动态分配结构,使用scanf函数时

分段故障:11

我不知道为什么它给分段错误....

+0

'char * name;' - >'char name [64];' – BLUEPIXY

回答

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)); 
+0

谢谢,它现在正在工作!我可以问什么类型应该明确分配在除char *之外的结构中吗? – RhumB

+0

@TsaiYuchen,编辑。 – Haris

+0

它是有道理的!非常感谢! – RhumB