程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++學習筆記——01

C++學習筆記——01

編輯:C++入門知識

最近准備跳槽的事情,於是把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 = 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."<<std::endl;  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<<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 == 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的時候的區別,很細微的錯誤,但是糾纏了快一個晚上才搞定,也作為提醒了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved