-1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "mystuff.h"

typedef struct Node
{
        int size;
        int status;
        struct Node *next;
        struct Node *previous;
} Node;


Node *endNode;
Node *rootNode;

void *my_foo(int size)
{
        Node *theNode;
        void *ptr;

        if (rootNode->next == NULL)
        {
                theNode->status = 1;
                ...

它在“rootNode-> == NULL”处出现段错误,但如果我将其更改为“rootNode == NULL”,那么当它命中“theNode->status = 1”并将 theNode 和 rootNode 声明为 NULL 时会出现段错误并没有帮助。

4

4 回答 4

1

...并将 theNode 和 rootNode 声明为NULL无济于事。

取消引用NULL(通常)导致段错误。在开始修改它们之前,您必须将它们设置为更有用的东西(例如分配的结构)!

于 2013-04-09T01:37:34.387 回答
0

我没有看到 rootNode 甚至被分配,它驻留在静态空间中,因此它拥有 nullptr 常量。您正在使用 -> 运算符取消引用它,因此无法完成。首先让它指向某个对象!

于 2013-04-09T01:34:39.817 回答
0

取消引用 NULL 指针将导致分段错误。

只能假设rootNode为 NULL,因为当您将条件更改为 时,它将进入代码块if(rootNode == NULL)。人们会进一步假设这是因为它从未被分配过。

此外,您显然从未设置theNode指向任何内容,因此该行将theNode->status尝试取消引用theNode,这指向...谁知道是什么。

解决方案:为您的变量赋值

另见:http ://en.wikipedia.org/wiki/Segmentation_fault

于 2013-04-09T01:34:47.957 回答
0

您是否在使用字段之前为 rootNode 分配内存(我的意思是 rootNode-> 下一个操作)?如果没有,请在之前使用 malloc,例如:rootNode = (struct Node *)malloc(sizeof(Node))。似乎你在做双链表,预定义 struct Node *next = NULL; 可能也是一个好主意;

于 2013-04-09T19:25:51.793 回答