这段代码有什么问题?

时间:2014-01-15 00:59:31

标签: c data-structures

我需要以下代码的帮助。

typedef struct orders
{
    int quantity;
    char foodname[50];
} ORDER;

ORDER *ptr;

typedef struct Table
{
    int tableno;
    int priority;
    ORDER *orders;
    struct Table *next;
} TABLE;

TABLE *head, *s;
int n = 0;

int insert(int tablenum, int prio, char foodname[], int qty)
{
    TABLE *newO, *temp, *temp2;
    newO = (TABLE*)malloc(sizeof(TABLE));
    newO->tableno = tablenum;
    newO->priority = prio;
    strcpy(newO->orders->foodname, foodname);
    newO->orders->quantity = qty;
       //more code here...
}

在该程序的主要功能中,将询问用户他们想要订购的食品的餐馆编号,优先级编号,名称以及他们订购的食品的数量。

此代码还有一个showlist函数,它将打印出列表中从最高优先级到最低优先级的所有数据。

现在我的问题是,例如我已经有两个不同的交易,会发生的是我的第二个交易复制了我的第一笔交易的“foodname”和“quantity”。

请帮帮我们。

1 个答案:

答案 0 :(得分:2)

TABLE *newO = (TABLE*)malloc(sizeof(TABLE));

TABLE分配内存,但不为orders分配内存,malloc调用后只是一个未初始化的指针,所以这一行:

newO->orders->quantity = qty;

调用未定义的行为。您还需要为订单分配内存,例如:

TABLE *newO = (TABLE*)malloc(sizeof(TABLE));
newO->orders = (ORDER*)malloc(10*sizeof(ORDER)); 
...
newO->orders[0]->quantity = qty;

...虽然说实话,很难说orders是否真的是一个数组。