我更改了代码,将memcpy移至if语句中,但仍然出现相同的错误。
**
*返回以给定顺序填充的新链表节点,该函数
*分配一个新订单并复制存储在数据中的值,然后分配一个
*链表节点。如果要实现此功能,请确保您
*复制,因为原始数据可能会被调用函数修改。
* /
struct order
{
int id;
char side;
int quantity;
double price;
};
struct onode
{
struct order* data;
struct onode* next;
struct onode* prev;
};
struct onode* newNode (struct order* data)
{
struct order* dataValue = (struct order*) malloc(sizeof(struct order));
struct onode* linkedlist = (struct onode*) malloc(sizeof(struct onode));
if(data != NULL)
{
linkedlist ->data = dataValue;
memcpy(dataValue, data, sizeof(*dataValue));
}
else
{
return NULL;
}
linkedlist->prev = NULL;
linkedlist->next = NULL;
return linkedlist;
}
最佳答案
问题不在于您显示的代码中。当这样调用时:
struct onode * mylist;
struct order * data = malloc(sizeof(struct order));
data->id = 4;
data->price = 20.11;
data->quantity = 3;
data->side = 'a';
mylist = newNode(data);
列表
mylist
是使用包含data
中设置的值的节点正确生成的。我怀疑您用来生成列表的代码与上面显示的代码不同。编辑:对您的“错误”
测试失败:----------------------------------------------- -----------------------您的newNode似乎崩溃了!鉴于此,我们无法测试您的其余代码。您必须先修复它!
这不是任何人都可以调试的错误。无论您的学校使用哪种工具来验证代码,都期望与您提供的工具有所不同。如果您没有其他文档,我会问助教。
EDIT2:由于您的
memcpy()
,您不必担心一次处理一个值:memcpy(dataValue, data, sizeof(*dataValue));
这将占用您在
data
中设置的所有内容,并将这些值放在dataValue
中的正确位置。在上面的示例中,我为id
设置了4,为quantity
等设置了3。在memcpy()
调用之后,现在dataValue
和data
都将设置所有相同的值。它将data
中的值复制到dataValue
。得到它?