我有一个结构数组,每个结构作为一个元素列表。 我需要为每个结构添加多个对象,而我的添加功能却无法正常工作。
这是结构:
typedef struct object book, *list;
struct object{
int type;
int quantity;
list next;
};
这就是我如何定义我的数组以及main()函数中的内容:
row_n=4 //fixed just for now
cols_n=3
product **t;
t= (product **)calloc(row_n, sizeof(product *)); // array of row pointers
for (int i= 0; i<n; i++) {
t[i]= (product *)calloc(cols_n, sizeof(product)); // array of cols prod structs
}
t[1][1].type= 5; //only for testing
t[1][1].quantity= 15; //only for testing
list_all(t,row_n,col_n); //list all elements inside each array, its working as intended
insert(t, 3, 6); //Trying to insert more books
insert(t, 6, 10);
insert(t, 9, 50);
这是list_all函数:
void list_all(product **t , int size_n , int size_m)
{
int i,j;
product *p;
for(i=0;i<size_n;i++){
printf("--- row: ---: %d\n", i+1);
for(j=0;j<size_m;j++){
printf("--- col: ---: %d\n",j+1);
p= &t[i][j];
do {
printf("Book Type:%d Amount:%d\n", p->type, p->quantity);
p= p->next;
} while (p!=NULL);
}
}
}
这是我的问题实际存在,我需要修复此插入功能:
void insert(product **t, int id, int quantity)
{
product *p, *aux = NULL;
p=&t[0][0]; //doing it only in one position to test
if((aux = malloc(sizeof(product))) == NULL)
printf("Memory error\n");
else
{
aux->type=id;
aux->quantity=quantity;
p->next = p; }
p = aux;
}
我也需要删除书功能,但我想先解决这个问题。 谢谢你的建议。
答案 0 :(得分:0)
错误讯息是什么?
在你的代码中:
p->next = p;
似乎应该是:
aux->next = p;
以这种方式,您将产品作为列表的头部插入。
答案 1 :(得分:0)
我看到的2个问题是
p->next = p; -> aux->next = p;
和
//if
p=&t[0][0];
then
at the end
t[0][0] = p;
因为我认为t [0] [0]仍然指向较早的指针而不是指向列表的开头,因此添加节点不可见