C 新节点已断开。不知道怎么了?

C 新节点已断开。不知道怎么了?,c,C,我更改了代码,将memcpy移到if语句中,但仍然得到相同的错误 ** *返回用给定顺序填充的新链表节点,函数 *分配新订单并复制存储在数据中的值,然后分配新订单 *链表节点。如果要实现此功能,请确保 *重复,因为调用函数可以修改原始数据。 */ 您正在使用数据作为源调用memcpy,但在下一条语句中,您将测试数据是否不为null。这告诉我可以接受空数据指针,在这种情况下memcpy将崩溃。您可能需要在这里重新排列语句的顺序 顺便说一句,您已经通过调试器运行了吗?问题不在您显示的代码中。当这样称

我更改了代码,将memcpy移到if语句中,但仍然得到相同的错误

** *返回用给定顺序填充的新链表节点,函数 *分配新订单并复制存储在数据中的值,然后分配新订单 *链表节点。如果要实现此功能,请确保 *重复,因为调用函数可以修改原始数据。 */


您正在使用数据作为源调用memcpy,但在下一条语句中,您将测试数据是否不为null。这告诉我可以接受空数据指针,在这种情况下memcpy将崩溃。您可能需要在这里重新排列语句的顺序


顺便说一句,您已经通过调试器运行了吗?

问题不在您显示的代码中。当这样称呼它时:

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
中设置的值的节点正确生成的。我怀疑您用来生成列表的代码与上面显示的代码不一样


编辑:编辑您的“错误”

测试失败:-------------------------------------------------------------
您的新节点似乎已崩溃!有了它,我们就不能测试你的代码了<你必须先把它修好

这不是任何人都可以调试的错误。无论你的学校使用什么工具来验证你的代码,他们都期望得到与你提供的不同的东西。如果你没有其他文件,我会问助教


EDIT2:您不必担心每次应对一个值,因为您的
memcpy()

这将获取您在
data
中设置的所有内容,并将这些值放在
dataValue
中的正确位置。在我的示例(上面)中,我为
id
设置了4,为
quantity
设置了3。在
memcpy()
调用之后,现在
dataValue
data
都将设置相同的值。它将
data
中的值压缩到
dataValue
。明白了吗?

几点提示:

  • 如果数据为空,则应在例程开始时返回,以避免分配内存。如果数据为空,则将忽略内存

  • memcpy行是正确的,但更改sizeof可能更清晰,因此可以清楚地知道复制了多少内存:

    memcpy(dataValue,data,sizeof(struct order))

  • 实际上,您没有将设置数据放入onode中,我怀疑您需要该行:

    linkedList->data=dataValue

如您在评论中所问,您还可以填写新的结构顺序:

dataValue->id = data->id // etc.
然后您可以进行比较:

if (data->id == linkedList->data->id) {
    /* It matches */
}

你能提供一些相同的输入/输出吗?它是如何失败的?故障/崩溃?下单不好?顺便说一句,像这样换电话<代码>(结构顺序*)malloc(sizeof(结构顺序))到此:
malloc(sizeof(*dataValue))所以我将memcpy移到if语句(if!=NULL)中,但我仍然得到一个错误,表示newNode已崩溃。@Dogbert这是我测试失败的错误:-------------------------------------------------------------您的newNode似乎已崩溃!有了它,我们就不能测试你的代码了。你必须先修好它@EdS.你能解释一下为什么我需要将它改为*dataValue,而不是使用order吗?这很有意义。我需要正确分配我的列表和数据。我哪里也没做过。只是一个简单的问题,下面的回答正确吗?数据->id=linkedlist->数据->id?因为我必须出示身份证match@Eciliptus-嗯。。这些类型匹配,是的。如果您正在谈论在
newNode()
函数中执行类似的操作,那么逻辑似乎有点倒退(因为您正在传递数据,所以您不想覆盖它),这就是我的方法。我需要复制数据,所以我使用memcpy。我仍然有点担心如何将id、价格和其他所有信息存储在linkedlist中。我认为这样做(data->id=linkedlist->data->id)可以解决这个问题。但这似乎不是仪式。我非常感谢您的帮助,您能多给我一些指导,告诉我如何实现这个功能。我不完全理解它,这就是我想要做的。我不想要答案,但要了解如何实现它。使用单结构很好,但使用双结构会让我感到困惑如果我使用数据->id=linkedlist->数据->id,这是否意味着两个id都匹配?我需要做这个或类似的事情吗?感谢您提供的所有帮助。帮助点2不正确
sizeof(结构顺序)
sizeof(*dataValue)
将产生相同的大小
dataValue->id = data->id // etc.
if (data->id == linkedList->data->id) {
    /* It matches */
}