设为首页 加入收藏

TOP

C++学习笔记――01
2015-07-24 05:46:06 来源: 作者: 【 】 浏览:4
Tags:学习 笔记
最近准备跳槽的事情,于是把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."<
?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."<
?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的时候的区别,很细微的错误,但是纠缠了快一个晚上才搞定,也作为提醒了。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 1611 The Suspects 并查集 Un.. 下一篇usb host鼠标不能使用原因

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: