【发布时间】:2019-05-20 00:51:34
【问题描述】:
我开始学习C,但我不知道为什么应用程序总是崩溃。
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[50];
int age;
}person;
void initPerson(person *aPerson, char name[50], int age)
{
strcpy(aPerson->name, name); // <- causes a crash
aPerson->age = age; // <- causes a crash
printf("%s", aPerson->name);
}
int main()
{
person *myPerson;
initPerson(myPerson, "Oscar", 45);
printf("%s, %i", myPerson->name, myPerson->age);
return 0;
}
我已经标记了导致崩溃的行。谁能告诉我是什么问题?
【问题讨论】:
-
person *myPerson;需要给myPerson分配内存。 -
你可以用
person *myPerson = malloc(sizeof(person));来做。 -
请记住,在 C 中,您可以动态分配,但您没有义务:
person myPerson; initPerson(&myPerson, "Oscar", 45);可以工作并避免与动态内存管理。谷歌memory leaks:) -
啊,所以 person myPerson 会自动分配内存,但 person *myPerson 不会,因此必须手动分配: person *myPerson = malloc(sizeof(person));
-
确实是这个意思。