我遵循了非常简单的伪代码,用于在c中实现结构的链表,这是: pseudo code for struct linked list
我面临的问题是添加第四个节点后的内存丢失: 在第四个加法之后,第四个节点指向第三个节点,第三个节点指向一个奇怪的地址。 在第4次添加之前,第3个节点指向第2个节点-我如何丢失内存? 这是我的代码:
RailPart *headPart = NULL;
void createRailPart(char *partInfo, char *connectTypes){
char sPart[1];
char ePart[1];
char len[MAX_FIELD_SIZE];
char price[MAX_FIELD_SIZE];
char *noneDigit;
//allocate memory
RailPart *toPush = (RailPart*)malloc(sizeof(headPart));
if (toPush == NULL){
return;
}
//initialize data
sscanf(partInfo, "%[^,],%[^,],%[^,],%[^,]", sPart, ePart, len, price);
(*toPush).start = sPart[0];
(*toPush).end = ePart[0];
for (int i = 0; i < (int) strlen(connectTypes); i++){
if ((toPush)->end == connectTypes[i]){
(toPush)->ePartIdx = i;
}
if ((toPush)->start == connectTypes[i]){
(toPush)->sPartIdx = i;
}
}
(*toPush).len = (int) strtol(len, &noneDigit, BASE_10);
(*toPush).price = (int) strtol(price, &noneDigit, BASE_10);
//push the new node
toPush->nextPart = headPart;
headPart = toPush;
}
这是调试器的文档,显示了我描述的内存丢失 clear & informative debugger overview 如果我在堆中分配了内存,为什么会丢失该内存? 我该怎么办才能处理此行为?
编辑:问题已解决,但是现在我的链表中遇到一个圆圈-似乎计算机不记得它已经分配了内存的某些部分,并且再次分配了它。如您所见,在第4次迭代中,正在分配一个未使用的内存,但是在读取sscanf行之后,它将更改其地址。这怎么可能?