在节点中存储int

时间:2013-04-02 01:16:55

标签: c linked-list

#include <stdio.h>
#include <stdlib.h>

struct Fraction { 
    int num;
    int denom;
};

struct PolyTerm {
    int expo;
    struct Fraction coeff;
};

struct PolyNode {
    struct PolyTerm* dataPtr;
    struct PolyNode* next;
};

typedef struct Fraction* FractionAddr;
typedef struct PolyNode* PolyNodeAdr;
typedef struct PolyNode* PolyList;

int main() {
    int exponet;
    PolyNodeAdr polyNode = 0;

    printf("\n\tPlease Enter expoent: ");
    scanf("%d", &exponet);

    polyNode->dataPtr->expo = exponet;

    //printf("\n%d\n",polyNode->dataPtr->expo);

    return;
}

在上面的代码中,我试图将exponet存储到多边形结构中的expo中

但我尝试了很多方法,但错误不断出现

是不是expo是一个int?为什么我不能将exponet(int)存储到其中?

当我将struct PolyTerm dataPtr;放在polyNode

的结构中时,我检查了几个方法 主要的

polyNode->dataPtr.expo = exponet;,它会起作用

我认为因为dataPtr是一个指针struct PolyTerm* dataPtr;

但我不知道修复它

任何人都可以向我解释为什么我不能这样做以及它的解决方案是什么?

3 个答案:

答案 0 :(得分:0)

您正在取消引用NULL指针。

polyNode == NULL

dataPtr == anything

所以polyNode->dataPtr->expo实际上是(NULL)->dataPtr->expo。它没有意义。因为您尝试访问受限内存而存在分段错误。这就是为什么Windows弹出那条消息。

编辑:感谢@Nik指出我的答案中的错误。

答案 1 :(得分:0)

没有为PolyNodeAdr polyNode

分配内存

您必须在声明polyNode->dataPtr->expo = exponet;的polyNode工作

后添加此内容
polyNode = malloc( sizeof( struct PolyNode )) ;
polyNode->dataPtr = malloc( sizeof( struct PolyTerm )) ;

请注意struct PolyNode使用PolyNodeAdr,因为您已将PolyNodeAdr更改为带有typedef的指针。

此外,您不应该键入一个指针,因为您丢失了名称为指针的信息。

例如:

typedef struct PolyNode* PolyNodeAdr;

应该是:

typedef struct PolyNode PolyNodeAdr;

所以稍后你宣布:

PolyNodeAdr * polyNode;

答案 2 :(得分:0)

你必须为你要取消引用的所有指针分配内存。完成后释放内存。

int main() {
    int exponet;
    PolyNodeAdr polyNode = (PolyNodeAdr)malloc(sizeof(PolyNode));
    polyNode->dataPtr = (PolyTerm*)malloc(sizeof(PolyTerm));

    printf("\n\tPlease Enter expoent: ");
    scanf("%d", &exponet);

    polyNode->dataPtr->expo = exponet;

    //printf("\n%d\n",polyNode->dataPtr->expo);

    free(polyNode->dataPtr);
    free(polyNode);
    return 0;
}