?32 ? ? }
?33 ? ? Stack(NODE_DATA_TYPE data)
?34 ? ? {
?35 ? ? ? ? header = (Node *)malloc(sizeof(Node));
?36 ? ? ? ? header->data = data;
?37 ? ? ? ? header->next = NULL;
?38 ? ? ? ? _ASSERTE(_CrtCheckMemory());
?39 ? ? }
?40 ? ? bool isEmpty(void)
?41 ? ? {
?42 ? ? ? ? return header == 0 ? true : false;
?43 ? ? }
?44 ? ? void addElement(NODE_DATA_TYPE data)
?45 ? ? {
?46 ? ? ? ? if(header == 0)
?47 ? ? ? ? {
?48 ? ? ? ? ? ? header = (Node *)malloc(sizeof(Node));
?49 ? ? ? ? ? ? header->data = data;
?50 ? ? ? ? ? ? header->next = NULL;
?51 ? ? ? ? }
?52 ? ? ? ? else
?53 ? ? ? ? {
?54 ? ? ? ? ? ? Node *newNode = (Node *)malloc(sizeof(Node));
?55 ? ? ? ? ? ? newNode->data = data;
?56 ? ? ? ? ? ? newNode->next = header;
?57 ? ? ? ? ? ? header = newNode;
?58 ? ? ? ? }
?59 ? ? ? ? _ASSERTE(_CrtCheckMemory());
?60 ? ? }
?61 ? ? NODE_DATA_TYPE popElement(void)
?62 ? ? {
?63 ? ? ? ? if(header == 0)
?64 ? ? ? ? {
?65 ? ? ? ? ? ? std::cout<<"Empty stack,operation teminated."<
?66 ? ? ? ? ? ? return -1;
?67 ? ? ? ? }
?68 ? ? ? ? else
?69 ? ? ? ? {
?70 ? ? ? ? ? ? NODE_DATA_TYPE popData = header->data;
?71 ? ? ? ? ? ? Node *temp = header;
?72 ? ? ? ? ? ? header = header->next;
?73 ? ? ? ? ? ? free(temp);
?74 ? ? ? ? ? ? _ASSERTE(_CrtCheckMemory());
?75 ? ? ? ? ? ? return popData;
?76 ? ? ? ? }
?77 ? ? }
?78 ? ? void printStack(void) const
?79 ? ? {
?80 ? ? ? ? Node *temp = header;
?81 ? ? ? ? while(temp != NULL)
?82 ? ? ? ? {
?83 ? ? ? ? ? ? std::cout<
data<
?84 ? ? ? ? ? ? temp = temp->next;
?85 ? ? ? ? }
?86 ? ? }
?87 ? ? bool searchElement(NODE_DATA_TYPE data)
?88 ? ? {
?89 ? ? ? ? while(header->next != NULL)
?90 ? ? ? ? {
?91 ? ? ? ? ? ? if(header->data == data)
?92 ? ? ? ? ? ? {
?93 ? ? ? ? ? ? ? ? return true;
?94 ? ? ? ? ? ? }
?95 ? ? ? ? ? ? else
?96 ? ? ? ? ? ? {
?97 ? ? ? ? ? ? ? ? header = header->next;
?98 ? ? ? ? ? ? }
?99 ? ? ? ? }
100 ? ? ? ? return false;
101 ? ? }
102 };
103 #endif ?
复制代码
开始在这一句话:
?
free(temp);
的时候始终报错,错误如下:
?
? CRT detected that the application wrote to memory after end of heap buffer
?
后来求助之后发现是自己内存申请的时候出了错,将
?
(Node *)malloc(sizeof(Node))
写成
?
(Node *)malloc(sizeof(Node *))
导致的。
?
忽略了结构体和结构体指针在sizeof的时候的区别,很细微的错误,但是纠缠了快一个晚上才搞定,也作为提醒了。