在节点中存储int #包括 #包括 结构分数{ int-num; int-denom; }; 结构理工{ 国际博览会; 结构分数系数; }; 结构多项式{ struct PolyTerm*dataPtr; 结构多项式*下一步; }; typedef结构分数*fractidddr; typedef struct PolyNode*PolyNodeAdr; typedef struct PolyNode*多段列表; int main(){ int exponet; PolyNodeAdr polyNode=0; printf(“\n\t请输入expent:”); scanf(“%d”和exponet); polyNode->dataPtr->expo=exponet; //printf(“\n%d\n”,polyNode->dataPtr->expo); 返回; }
在上面的代码中,我试图将exponet存储在polynode结构的expo中 但我尝试了很多方法,但错误不断出现 世博会不是一个整数?为什么我不能将exponet(int)存储到其中 当我把在节点中存储int #包括 #包括 结构分数{ int-num; int-denom; }; 结构理工{ 国际博览会; 结构分数系数; }; 结构多项式{ struct PolyTerm*dataPtr; 结构多项式*下一步; }; typedef结构分数*fractidddr; typedef struct PolyNode*PolyNodeAdr; typedef struct PolyNode*多段列表; int main(){ int exponet; PolyNodeAdr polyNode=0; printf(“\n\t请输入expent:”); scanf(“%d”和exponet); polyNode->dataPtr->expo=exponet; //printf(“\n%d\n”,polyNode->dataPtr->expo); 返回; },c,linked-list,C,Linked List,在上面的代码中,我试图将exponet存储在polynode结构的expo中 但我尝试了很多方法,但错误不断出现 世博会不是一个整数?为什么我不能将exponet(int)存储到其中 当我把struct PolyTerm dataPtr 和polyNode->dataPtr.expo=exponet基本上,它可以工作 我认为,因为dataPtr是一个指针struct PolyTerm*dataPtr 但我不知道该怎么做 有人能解释一下为什么我不能这样做,以及解决方法是什么吗?您正在解引用一个NU
struct PolyTerm dataPtr
和polyNode->dataPtr.expo=exponet代码>基本上,它可以工作
我认为,因为dataPtr是一个指针struct PolyTerm*dataPtr代码>
但我不知道该怎么做
有人能解释一下为什么我不能这样做,以及解决方法是什么吗?您正在解引用一个NULL
指针
polyNode==NULL
dataPtr==anything
所以polyNode->dataPtr->expo
实际上是(NULL)->dataPtr->expo
。它没有意义。存在分段错误,因为您试图访问受限内存。这就是windows弹出该消息的原因
编辑:感谢@Nik指出了我答案中的错误。没有为PolyNodeAdr polyNode
您必须在为polyNode->dataPtr->expo=exponet声明polyNode之后添加此项代码>开始工作
#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;
}
注意struct PolyNode
notPolyNodeAdr
的用法,因为您将PolyNodeAdr
更改为typedef指针。
此外,您不应该键入定义指针,因为您会丢失名称是指针的信息
例如:
polyNode = malloc( sizeof( struct PolyNode )) ;
polyNode->dataPtr = malloc( sizeof( struct PolyTerm )) ;
应该是:
typedef struct PolyNode* PolyNodeAdr;
所以稍后你要声明:
typedef struct PolyNode PolyNodeAdr;
您必须为所有要取消引用的指针分配内存。完成后释放内存
PolyNodeAdr * polyNode;
你会得到什么错误?polynode不指向任何东西。您正在取消对空指针的引用。即使是DATAPTR也是空的。我使用Visual C++,我可以运行代码,但在插入了索引之后,窗口消息弹出并停止工作,你能再多加一些代码吗?@ KouSek——实际上,代码> DATAPTR <代码>可以是任何东西,甚至是土豆。首先,代码> DATAPTR <代码>不是代码> NULL>代码>:根本没什么。code>polyNode->dataPtr->expo
实际上是(NULL)->dataPtr->expo
-取消对NULL
指针的引用是错误的。其次,polyNod
不是结构-它是指向结构的指针,初始化指向0
的指针是完全有效和正确的。@NikBougalis感谢您指出它们。更正了我的答案。希望它不会误导OP。哦,实际上我有分配内存给节点,但没有分配给dataPtr,这就是为什么它不工作,我认为polyNodePtr是唯一的指针,我不认为我需要在它里面分配指针。好的,谢谢!请不要将malloc
的结果转换为C。这不是必需的,有些人甚至可以这样做。好的,但是对于poitner的typedef,我认为两种方法都有效?是的,当然两种方法都有效,但其中一种更具可读性。
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;
}