我创建了以下结构:
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] 中的 [position] 处获取项目并将其地址复制到 [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];
}
关于从结构指针复制到C中数据库的结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988327/