小粉猪 发表于 2021-10-21 20:41:31

free函数释放空间报错(用的VS)Output函数中调用的free函数

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <malloc.h>
using namespace std;

typedef int Elemtype;

typedef struct Node {
        Elemtype data;
        Node* next;
}node,*pnode;

struct point {
        pnode head;
        pnode tail;
};

point Init() {//初始化队列指针
        point p;
        p.tail = p.head = nullptr;
        return p;
}

void InsertElem(point& p, Elemtype e) {//队尾插入元素
        pnode node = (pnode)malloc(sizeof(node));
        if (node) {
                node->data = e;
                node->next = nullptr;
        }
        if (p.tail) {
                p.tail->next = node;
                p.tail = node;
        }
        else {
                p.head = p.tail = node;
        }
}

void OutputElem(point& p) {//对头输出元素并释放空间
        pnode move;
        if (!p.head) {
                cout << "Queue empty!" << endl;
                exit(0);
        }
        Elemtype temp;
        temp = p.head->data;
        move = p.head;
        p.head = move->next;
        if (!p.head) {
                p.tail = nullptr;
        }
        free(move);//这里有问题,去掉就可以运行,
        cout << temp << endl;
}

int main() {
        point p = Init();
        for (int i = 0; i < 10; ++i) {
                InsertElem(p, i);
        }
        for (int i = 0; i < 10; ++i) {
                OutputElem(p);
        }
        OutputElem(p);
        return 0;
}

小粉猪 发表于 2021-10-21 20:52:33

{:10_266:}

jhq999 发表于 2021-10-22 11:31:47

本帖最后由 jhq999 于 2021-10-22 11:37 编辑

{:5_104:}

jhq999 发表于 2021-10-22 11:47:15

本帖最后由 jhq999 于 2021-10-22 11:49 编辑

void InsertElem(point& p, Elemtype e) {//队尾插入元素
       // pnode node = (pnode)malloc(sizeof(node));
       pnode node = (pnode)malloc(sizeof(Node));//sizeof(node)=4,sizeof(Node)=8;

小粉猪 发表于 2021-10-22 15:35:21

十分感谢,问题就出现在这里。

小粉猪 发表于 2021-10-22 15:35:57

{:10_257:}
页: [1]
查看完整版本: free函数释放空间报错(用的VS)Output函数中调用的free函数