【发布时间】:2013-12-07 02:03:11
【问题描述】:
我正在遍历具有两个字段的节点列表:next 和 size。代码中有一点需要链接一个新节点,但我遇到了麻烦。我找到了代码段错误的地方,它看起来像这样。请注意,curr 是列表中的当前节点,我需要在 curr 和 curr->next 之间链接 temp。
Node* temp = NULL;
temp = ((curr + 1) + a_memory_offset_int); //calculate the address where temp should go
temp->next = curr->next; //Seg faults here
temp->size = some_other_int; //Seg faults here as well
curr->next = temp;
有什么方法可以让我尝试为 NULL 节点设置字段吗?语法有问题吗(我相信逻辑是正确的)?
【问题讨论】:
-
发布更多代码。并作为规则通过 valgrind 和 gdb 运行它
-
无法在 NULL 字段中设置值。我之前的指针算法似乎有问题。请注意,它是在指针大小指针运算中进行的。
-
@BLUEPIXY 但我不认为它是 NULL,因为我将它设置为 NULL 之后的行,我将 temp 内的值更改为在前一个节点的地址之后。我明白你所说的关于指针大小的算术,这就是为什么我使用 (curr + 1) 而不是 (curr + sizeof(Node)) 的原因。感谢您的意见
-
任何时候你都在做指针运算,你自己。我怀疑你在这里有一些误解,因为很少需要指针算术(除了通过数组递增)。
-
不,不,
A_memory_offset_int问题的根源而不是+1?
标签: c null linked-list malloc pointer-arithmetic