0

我正在尝试从堆中打印。如果我遇到一个 NULL 指针,我应该打印 NULL;否则,打印它的价值。

样本输出:

1   [2]
2   null
3   null
4   [7, 3]
5   null
6   [7]

但是我的代码因为取消引用 NULL 指针而不断崩溃。

这是我编写的用于测试的代码:

void printResult(IntList* intL, int nNode, int nEdge)
{
    int i;
    for (i; i <= 10; i++)
    {
        if (intRest((intL))
        {
            printf("%d", intFirst((intL)[i]));
            intRest((intL)[i]);
        }
        else
            printf(" NULL ");
    }
}

//Here is the definition of functions:
//First
int intFirst(IntList oldL)
{
    return oldL->element;
}

/** rest
 */
IntList intRest(IntList oldL)
{
    return oldL->next;
}
//=================
struct IntListNode
{
    int element;
    IntList next;
};

//===================
typedef struct IntListNode * IntList;
4

2 回答 2

8

您有单链表,其中包含未存储在连续内存块中的节点(它们相当分散),因此尝试以这种方式遍历其元素:

for (i; i <= 10; i++)
    printf("%d", intFirst((intL)[i]));

导致未定义的行为,因为您正在访问错误的内存。您应该执行以下操作:

struct IntListNode * ptr = *intL;
while (ptr) {
    printf("%d", ptr->element);
    ptr = ptr->next;
}
于 2013-10-16T23:39:36.473 回答
4

如果

IntList intRest(IntList oldL)
{
    return oldL->next;
}

是您对 NULL 的测试if (intRest((intL))

如果 intL == NULL,那么您的代码将崩溃。

于 2013-10-16T23:39:22.077 回答