首页 > 代码库 > C++学习笔记——01

C++学习笔记——01

最近准备跳槽的事情,于是把C++翻出来看,顺便做了一些练习,主要是数据结构方面的,就贴在这里做个系列,权当督促自己了。

第一天,写了一个栈,调试了下没什么问题,内存泄露的问题也解决了。

  1 #ifndef STACK_H  2 #define STACK_H  3   4 #include "stdlib.h"  5 #include "iostream"  6   7 class Stack  8 {  9 private: 10     typedef int NODE_DATA_TYPE; 11     typedef struct Node{ 12         NODE_DATA_TYPE data; 13         struct Node * next; 14     }Node; 15     Node *header; 16 public: 17     Stack() 18     { 19         header = 0; 20     } 21     ~Stack() 22     { 23         std::cout<<"Destructor called."<<std::endl; 24         while(header != NULL) 25         { 26             Node *temp = header; 27             header = header->next; 28             free(temp); 29         } 30         _ASSERTE(_CrtCheckMemory()); 31         std::cout<<"Destructor call finished."<<std::endl; 32     } 33     Stack(NODE_DATA_TYPE data) 34     { 35         header = (Node *)malloc(sizeof(Node)); 36         header->data =http://www.mamicode.com/ 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 =http://www.mamicode.com/ data; 50             header->next = NULL; 51         } 52         else 53         { 54             Node *newNode = (Node *)malloc(sizeof(Node)); 55             newNode->data =http://www.mamicode.com/ 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."<<std::endl; 66             return -1; 67         } 68         else 69         { 70             NODE_DATA_TYPE popData = http://www.mamicode.com/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<<temp->data<<std::endl; 84             temp = temp->next; 85         } 86     } 87     bool searchElement(NODE_DATA_TYPE data) 88     { 89         while(header->next != NULL) 90         { 91             if(header->data =http://www.mamicode.com/= 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的时候的区别,很细微的错误,但是纠缠了快一个晚上才搞定,也作为提醒了。

以上。