【发布时间】:2019-05-06 10:30:33
【问题描述】:
我的问题是它的进程返回-1073741819。我该怎么做才能更快地编译它?
#include "Queue.h"
#include <iostream>
Queue::Queue()
{
topPtr = NULL;
tailPtr = NULL;
}
bool Queue::isEmpty()
{
if(topPtr == NULL && tailPtr == NULL)
return true;
else
return false;
}
void Queue::enqueue(int data)
{
Node *newNodePtr = new Node;
newNodePtr->data = data;
if(topPtr == NULL)
{
topPtr = tailPtr = newNodePtr;
tailPtr->nextPtr = NULL;
}
else
{
tailPtr->nextPtr = newNodePtr;
tailPtr = newNodePtr;
tailPtr->nextPtr = NULL;
}
}
int Queue::dequeue()
{
if (isEmpty())
{
cout << "empty" <<endl;
}
else
{
int dataToReturn = topPtr->data;
Node *nodeToDeletePtr = topPtr;
dataToReturn = nodeToDeletePtr->nextPtr;
topPtr = topPtr->nextPtr;
delete nodeToDeletePtr;
return dataToReturn;
}
}
#ifndef QUEUE_H
#define QUEUE_H
struct Node
{
int data;
Node *nextPtr;
};
class Queue
{
public:
Queue();
void enqueue(int data);
int dequeue();
bool isEmpty();
private:
Node *topPtr;
Node *tailPtr;
};
#endif
#include <iostream>
#include <string.h>
#include <cstdlib>
#include "Queue.h"
using namespace std;
int main(int argc, char const *argv[])
{
Queue integers;
string seriesIntegers;
cout << "Enter integers: ";
getline(cin, seriesIntegers);
char *seriesIntegersCStr = new char[seriesIntegers.length() + 1];
strcpy(seriesIntegersCStr, seriesIntegers.c_str());
char *tokens = strtok(seriesIntegersCStr, " ");
while(tokens != NULL)
{
integers.enqueue(atoi(tokens));
tokens = strtok(NULL, " ");
}
while(!integers.isEmpty())
{
cout << " " << integers.dequeue() << "\n";
}
}
【问题讨论】:
-
这是由于分段错误导致的程序终止吗?编译得更快是什么意思?
-
将数字复制到 Windows 7 计算器(程序员模式,Dword)并切换到十六进制。你得到
C0000005。现在,google "windows C0000005" 您会发现这是访问冲突的返回码(MS 的“分段错误”术语)。 (SO: Exception Error c0000005 in VC++) -
仅供参考,
dataToReturn = nodeToDeletePtr->nextPtr;毫无意义。左边是int,右边是指针。当您耗尽队列时,您无处将tailPtr重置为空。最后,在对空队列调用dequeue的情况下,您忽略了任何返回值(您承诺会提供)。标准库在其队列适配器的pop方法上返回void是有原因的。你不能从无到有回报。
标签: c++