您好我正在尝试使用结构中的指针创建程序。编译器似乎没有问题,但程序崩溃。 你能帮帮我吗?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int pos;
typedef struct _Parking Parking;
struct _Parking
{
int pos;
char name[15];
char description[80];
float price;
int slots[5];
char last_driver_id;
int reservations;
};
Parking *myaccounts;
int create_Parking()
{
strcpy(myaccounts->name,"Pro");
myaccounts->pos ++;
return pos-1;
}
int main()
{
int a;
a = create_Parking();
printf("a=%d\n",a);
printf("name=%s\n",myaccounts->name);
system("pause");
return 0;
}
答案 0 :(得分:8)
您的myaccounts指针初始化为NULL(作为全局变量),因此不指向可用内存。有关更多信息,请参阅malloc的手册页。
编辑:纳入Maciej的评论。
答案 1 :(得分:6)
你永远不会为“myaccounts”分配任何内存。
答案 2 :(得分:3)
C中的指针不指向有效内存(如果您尝试使用它们会崩溃),直到您通过在对象(&
)上使用address-of运算符或通过为它们分配内存并将该地址分配给指针(malloc()
和朋友)。当然,如果使用address-of运算符,当对象超出范围时,该位置可能无效。如果您使用malloc()
,则在调用free()
时该位置可能无效。在任何一种情况下,指针都会再次失效。
C也非常依赖于指针,所以你可以指望任何你编写的具有这种性质的bug的任何C代码,直到你追踪并修复它们为止。在C中使用编译器获取源代码并不意味着什么。如果你想用一种语言编写,你的代码在第一次运行它之后就可以运行它了,那么你需要Ada。
答案 3 :(得分:0)
你的指针没有指向任何东西。您可以尝试其中任何一种:
Parking myaccountsInstance;
Parking *myaccounts = &myaccountsInstance;
或在主要功能中:
开始于:
myaccounts = (Parking*)malloc(sizeof(Parking));
结束于:
free(myaccounts);