链接列表删除操作在使用C的Visual Studio中不起作用

问题描述 投票:0回答:1

当我尝试使用c在Visual Studio 2019中实现链接列表时,会产生堆错误。这是由于自由功能。但是,该代码在使用GCC编译器的在线编译器上可以正常工作。 https://www.jdoodle.com/c-online-compiler/

我无法弄清楚........................

enter image description here

这里是代码:

#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int data;
    struct Node* next;
};

struct Node* head = NULL;

void append(int data)
{

    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node*));
    (*newNode).data = data;
    (*newNode).next = NULL;

    if (head == NULL)
    {
        head = newNode;
        return;
    }

    struct Node* temp = head;

    while (temp->next != NULL)
    {
        temp = temp->next;
    }

    temp->next = newNode;
}

void insertAt(int position, int data)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node*));
    newNode->data = data;
    newNode->next = NULL;



    if (position == 1)
    {
        newNode->next = head;
        head = newNode;
        return;
    }

    struct Node* temp = head;

    for (int i = 1; i < position - 1; i++)
    {
        temp = temp->next;
    }

    newNode->next = temp->next;
    temp->next = newNode;
}

void deleteAt(int position)
{
    struct Node* temp = NULL;

    if (position == 1)
    {
        temp = head;
        head = temp->next;
        free(temp);
        return;
    }

    struct Node* tempHead = head;

    for (int i = 1; i < position - 1; i++)
    {
        tempHead = tempHead->next;
    }

    temp = tempHead->next;
    tempHead->next = temp->next;
    free(temp);


}

void print()
{
    struct Node* temp = head;

    while (temp != NULL)
    {
        printf("%d\n", temp->data);
        temp = temp->next;
    }

}

void main()
{
    append(3);
    append(4);
    append(5);
    append(6);

    insertAt(3, 20);
    insertAt(4, 50);
    insertAt(2, 70);

    deleteAt(4);
    deleteAt(3);


    print();
}
c++ c visual-studio visual-c++
1个回答
0
投票

您要传递给malloc的尺寸是错误的。您应该通过sizeof(struct Node)

如果将其编译为C ++,则根本不应该使用malloc

© www.soinside.com 2019 - 2024. All rights reserved.