C 使用指针作为函数参数读取并显示名称和年龄

C 使用指针作为函数参数读取并显示名称和年龄,c,function,pointers,C,Function,Pointers,我想写一个函数来读取某人的姓名和年龄,并在使用指针作为参数后显示他们 #include <stdio.h> #include <stdlib.h> #include <string.h> void read(char **name, int *age) { printf("name: "); scanf("%s", *name); printf("age: "); scanf("%d", age); } void write(char *n

我想写一个函数来读取某人的姓名和年龄,并在使用指针作为参数后显示他们

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void read(char **name, int *age)
{
  printf("name: ");
  scanf("%s", *name);
  printf("age: ");
  scanf("%d", age);
}

void write(char *name, int age)
{
  printf("%s, %d\n", name, age);
}

int main(void)
{
  char *name;
  int age;
  read(&name, &age);
  write(name, age);
  free(name);
  return 0;
}
#包括
#包括
#包括
无效读取(字符**名称,整数*年龄)
{
printf(“名称:”);
scanf(“%s”,*名称);
printf(“年龄:”);
scanf(“%d”,年龄);
}
无效写入(字符*名称,整数)
{
printf(“%s,%d\n”,姓名,年龄);
}
内部主(空)
{
字符*名称;
智力年龄;
阅读(姓名和年龄);
写(姓名、年龄);
免费(姓名);
返回0;
}

当我运行此命令时,会收到错误消息:
进程终止,状态为-1073741819(0分钟,2秒))
。是因为我没有为
name
分配任何内存吗?您能解释一下我做错了什么吗?

您没有分配
名称,这会导致您的应用程序崩溃,因为
scanf
试图在应用程序空间之外写入内存,可能会导致访问冲突

您需要
malloc
一些空间:

char *name = (char*) malloc(sizeof(char) * 256);
或者在堆栈上分配一些空间(并在末尾删除对
free(name)
的调用):


在指针指向有效对象之前,不能取消引用指针<代码>名称
未初始化。而且你
免费
它而不分配它,这是错误的。因此,是的,错误是因为您没有给
name
@SergeBallesta任何内存,谢谢!我忘了做那件事,我不明白出了什么问题。谢谢!正如其他人指出的,我忘记分配内存了。
char name[256];