[英]Copying from struct pointer to struct pointer for database in C
我创建了以下结构:
typedef struct {
char name[15];
int ID;
} Employee;
typedef Employee Item;
typedef struct {
Item items[5];
int size;
} List;
我正在偷看这个函数,以查看列表中存储了什么:
void Peek (int position, List *L, Item *X);
该功能应将列表中[位置]的[L]中的项目取走,并将其地址复制到[X]。 我有这个偷看功能:
void Peek (int position, List *L, Item *X) {
Item *B;
B = malloc(sizeof(L->items[position]));
X = B;
}
这会将X分配到与B相同的位置,但是我认为这将导致内存泄漏,更重要的是,如果我尝试通过以下函数在我的主设备中回叫X的ID:
int EmployeeID (Employee X) {
return(X.ID);
}
我返回了32665或类似的东西。 从L到X获取数据的另一种方式是什么?
X和B都是指针
X = B是指针分配,而不是结构分配
X是一个按值传递参数,将一个值分配给函数内部的X对函数外部的X值具有零影响。
试试这个(不是解决方案,而是朝着正确方向迈出的一步):
void Peek (int position, List *L, Item **X)
{
Item *B;
B = malloc(sizeof(L->items[position]));
*X = B;
}
但是,L-> items [position]的值仍未分配给X空间。
选项2:
void Peek(int position, List *L, Item *X)
{
*X = L->items[position];
}
假设X已经指向一个malloc分配的内存块。 如果不是,则选项3
选项3:
void Peek (int position, List *L, Item **X)
{
Item *B;
B = malloc(sizeof(L->items[position]));
*X = B;
*B = L->items[position];
}
“该函数应...将其地址复制到X
” 〜>此代码存在问题:
void Peek (int position, List *L, Item *X) {
Item *B = malloc(sizeof(L->items[position]));
X = B;
}
是它不会更改作为第三个参数传递的原始指针。 您实际需要做的是修改指针本身,因此您需要从函数中返回该指针或将其作为Item**
传递,即指向指针的指针:
void Peek (int position, List *L, Item **X) {
Item *B = malloc(sizeof(L->items[position]));
*X = B;
}
...
// and somewhere:
Peek(position, L, &X); // <-- you should pass an address of pointer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.