如何在不丢失内存的情况下创建链表?

时间:2020-05-09 15:31:24

标签: c

我遵循了非常简单的伪代码,用于在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行之后,它将更改其地址。这怎么可能?

circle in linked list

0 个答案:

没有答案