Rhu*_*umB 0 c struct scanf segmentation-fault
#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);
}
Run Code Online (Sandbox Code Playgroud)
输入名称:asdf
分段错误:11
我不知道为什么它会给出分段错误....
你分配了内存struct.
但你没有分配内存p->name指向的内存
将其添加到您的代码中.
struct Person *p = malloc(sizeof(struct Person));
p->name = malloc(100);
Run Code Online (Sandbox Code Playgroud)
不应该在结构中显式分配任何类型的空间.
当你做到了
struct Person *p = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)
空间被分配name和age两者.但请注意,这name是一个指针变量.已为指针变量分配空间,但不为指针指向的位置分配空间.
就像你做的那样
char* p;
Run Code Online (Sandbox Code Playgroud)
p创建变量,为其分配空间,但如果要使用它,则有两个选项.
1)使其指向一些现有的已分配内存
char* p;
char arr[10];
p = arr;
Run Code Online (Sandbox Code Playgroud)
2)或者在它指向的位置分配内存.
char* p = malloc(sizeof(char));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |