为什么这个SEGFAULT? (少量代码)

时间:2013-04-09 01:31:44

标签: c

#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-&gt; == NULL”处进行了段错误,但是如果我将其更改为“rootNode == NULL”,那么当它点击“theNode-&gt; status = 1”并且将节点和rootNode声明为NULL时会出现段错误没有帮助。

4 个答案:

答案 0 :(得分:1)

  

...并将theNode和rootNode声明为NULL没有帮助。

解除引用NULL(通常)导致段错误。在你修改它们之前,你必须将它们设置为更有用的东西(比如分配的结构)!

答案 1 :(得分:0)

我没有看到rootNode被分配,因此它驻留在静态空间中,因此它保持nullptr常量。您正在使用 - &gt;取消引用它操作员,所以无法完成。 首先要指出一些对象!

答案 2 :(得分:0)

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

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

此外,您明确从未将theNode设置为指向任何内容,因此行theNode->status将尝试取消引用theNode,其指向......谁知道什么。

解决方案:为变量指定值

另请参阅:http://en.wikipedia.org/wiki/Segmentation_fault

答案 3 :(得分:0)

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