码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记——01

时间:2014-07-02 20:35:37      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   数据   

最近准备跳槽的事情,于是把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的时候的区别,很细微的错误,但是纠缠了快一个晚上才搞定,也作为提醒了。

以上。

C++学习笔记——01,布布扣,bubuko.com

C++学习笔记——01

标签:des   style   blog   http   color   数据   

原文地址:http://www.cnblogs.com/chrischeng/p/3819302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!