结构指针?出了点问题

时间:2010-11-02 13:35:08

标签: c pointers struct

您好我正在尝试使用结构中的指针创建程序。编译器似乎没有问题,但程序崩溃。 你能帮帮我吗?

#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;    
}

4 个答案:

答案 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);