0
#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 存储到 polynode 结构中的 expo 中

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

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

当我刚刚放入struct PolyTerm dataPtr;polyNode 的结构时,我检查了几种方法

总的来说,polyNode->dataPtr.expo = exponet;它会起作用

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

但我不知道要修复它

谁能向我解释为什么我不能这样做以及解决方案是什么?

4

3 回答 3

0

您正在取消引用NULL指针。

polyNode == NULL

dataPtr == anything.

polyNode->dataPtr->expo实际上也是如此(NULL)->dataPtr->expo。它没有意义。存在分段错误,因为您试图访问受限内存。这就是为什么 Windows 会弹出该消息的原因。

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

于 2013-04-02T01:27:52.590 回答
0

没有分配内存PolyNodeAdr polyNode

您必须在声明 polyNode 后添加它polyNode->dataPtr->expo = exponet;才能工作

polyNode = malloc( sizeof( struct PolyNode )) ;
polyNode->dataPtr = malloc( sizeof( struct PolyTerm )) ;

struct PolyNode请注意not的用法,PolyNodeAdr因为您 PolyNodeAdr使用 typedef 更改为指针。

此外,您不应该 typedef 指针,因为您丢失了名称是指针的信息。

例如:

typedef struct PolyNode* PolyNodeAdr;

应该:

typedef struct PolyNode PolyNodeAdr;

所以后来你声明:

PolyNodeAdr * polyNode;
于 2013-04-02T01:29:20.283 回答
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;
}
于 2013-04-02T01:34:58.373 回答