C++学习笔记——01_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C++学习笔记——01

C++学习笔记——01

 2014/7/2 17:20:48  chrischeng  程序员俱乐部  我要评论(0)
  • 摘要:最近准备跳槽的事情,于是把C++翻出来看,顺便做了一些练习,主要是数据结构方面的,就贴在这里做个系列,权当督促自己了。第一天,写了一个栈,调试了下没什么问题,内存泄露的问题也解决了。1#ifndefSTACK_H2#defineSTACK_H34#include"stdlib.h"5#include"iostream"67classStack8{9private:10typedefintNODE_DATA_TYPE;11typedefstructNode
  • 标签:笔记 学习 C++学习笔记 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的时候的区别,很细微的错误,但是纠缠了快一个晚上才搞定,也作为提醒了。

以上。

发表评论
用户名: 匿名