invalid null pointer是咋回事,看了好久没看出错误。
MyQueue.cpp
#include "MyQueue.h" #include<iostream> using namespace std; MyQueue::MyQueue(int queueCapacity) { m_iQueueCapacity = queueCapacity; //当前代码可以调用ClearQueue() m_iHead = 0; //初始化队头 m_iTail = 0; //初始化队尾 m_iQueueLen = 0; //一开始元素0个 //默认构造函数要参数要赋初值 m_pQueue = new Customer[m_iQueueCapacity]; } MyQueue::~MyQueue() { delete[] m_pQueue; m_pQueue = NULL; } void MyQueue::ClearQueue() { //清空,但内存不处理 m_iHead = 0; m_iTail = 0; m_iQueueLen = 0; } bool MyQueue::QueueEmpty() const { if (m_iQueueLen == 0) return true; else return false; //return m_iQueueLen == 0 ? true : false; } bool MyQueue::QueueFull() const { if (m_iQueueLen == m_iQueueCapacity) return true; else return false; } int MyQueue::QueueLength() const { return m_iQueueLen; } bool MyQueue::EnQueue(Customer element) { //判满 if (QueueFull()) return false; m_pQueue[m_iTail] = element; m_iTail++; //循环 m_iTail = m_iTail % m_iQueueCapacity; m_iQueueLen++; return true; } bool MyQueue::DeQueue(Customer &element) { if (QueueEmpty()) return false; element = m_pQueue[m_iHead]; m_iHead++; //循环 m_iHead = m_iHead % m_iQueueCapacity; m_iQueueLen--; return true; } void MyQueue::QueueTraverse() { //m_iHead = 3时,m_iTale = 1时,通过以下可以顺利 //打印出m_pQueue[3],m_pQueue[0]的值 for (int i = m_iHead; i < (m_iHead + m_iQueueLen); i++) { m_pQueue[i % m_iQueueCapacity].printInfo(); } }
demo.cpp
#include<iostream> #include<stdlib.h> #include "MyQueue.h" using namespace std; /******************************************* 环形队列的C++代码检测 *******************************************/ int main(void) { MyQueue *p = new MyQueue(4); Customer c1("vortesnail", 21); Customer c2("hello", 22); Customer c3("world", 23); p->EnQueue(c1); p->EnQueue(c2); p->EnQueue(c3); p->QueueTraverse(); delete p; p = NULL; system("pause"); return 0; }
其他地方仔细看过了 没错,感觉出问题的应该在MyQueue里面,但是怎么也找不出错误。。