#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;
但我不知道修复它
任何人都可以向我解释为什么我不能这样做以及它的解决方案是什么?
答案 0 :(得分:0)
您正在取消引用NULL
指针。
polyNode == NULL
dataPtr == anything
。
所以polyNode->dataPtr->expo
实际上是(NULL)->dataPtr->expo
。它没有意义。因为您尝试访问受限内存而存在分段错误。这就是为什么Windows弹出那条消息。
答案 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;
}