我有一个像这样定义的结构:
typedef struct {
char* name;
int* phone;
} person;
分配如下:
person* Person[numNames];
for (i =0; i<numNames; i++) {
Person[i] = malloc(sizeof(person));
Person[i]->name = malloc(25 * sizeof(char));
Person[i]->phone = malloc(sizeof(int));
memset(Person[i]->phone, 0, sizeof(int));
}
将输入读入这样的手机:
for (i=0; i<numNames; i++) {
printf("%s: ", Person[i]->name);
scanf("%d", &Person[i]->phone);
}
这给我一个分段错误:(还释放Person [i] - &gt;手机给我分段错误)
for (i =0; i<numNames; i++) {
printf("%s: %d", Person[i]->name, *Person[i]->phone);
}
如何在没有分段错误的情况下正确扫描到Person [i] - &gt;手机?
答案 0 :(得分:0)
scanf
requires you to pass a pointer to the "target" memory locations.你现在正在指针指针:
scanf("%d", &Person[i]->phone);
...但Person[i]->phone
已经是int*
,指向适合一个int
的内存位置。以下调用将正确填充phone
字段。
scanf("%d", Person[i]->phone);