1
私はどこでもこのエラーを見つけようとしています。私は、テキストを読み込み、リンクされたリストスタックに括弧をプッシュし、一致する括弧が読み込まれたときにそれらをポップするプログラムを書いています。しかし、pop関数のときにクラッシュします。スタックポップ機能のヘッドポインタがプログラムにクラッシュする
問題は、pop()またはpush()関数のいずれかにあります。
void IntStack::push(int data){
assert(!isFull());
Node *temp = new Node;
temp->data = data;
temp->next = NULL;
}
int IntStack::pop(){
int result = -1;
if(isEmpty()){
result = head->data; //Crashes on this line
Node *temp;
temp = head->next;
delete head;
head = temp;
}
return result;
}
次はドライバです。
#include <iostream>
#include <fstream>
#include <string>
#include "IntStack.h"
using namespace std;
bool ArePair(int first,char last){
if(first == '(' && last == ')') return true;
else if(first == '{' && last == '}') return true;
else if(first == '[' && last==']') return true;
return false;
}
int main(){
string fileName;
cout << "Hello, please enter a filename: ";
cin >> fileName;
ifstream inFile;
inFile.open(fileName.c_str());
while (!inFile){
cerr << "ERROR: Cannot open " << fileName << ". Please re-enter.\n";
cin >> fileName;
inFile.open(fileName.c_str());
}
string current;
IntStack iStack;
int par; //parenthesis
while(inFile){
inFile >> current;
for(int i=0;i<current.length();i++){
if(current[i] == '('||current[i] == '{'||current[i] == '['){
par = current[i];
iStack.push(par);
}
else if(current[i] == ')'||current[i] == '}'||current[i] == ']'){
if(!iStack.isEmpty() || !ArePair(par,current[i])){
cout << "debug\n";
}
else{
iStack.pop();
}
}
}
}
inFile.close();
}
助けてください。私はそれが無効なポインタかもしれないと思う。私はこれがスタックを利用する最も効率的な方法ではないことを理解していますが、私は単一リンクリストを使用する必要があるクラスに対してです。コードの最後は不完全なので、私は私のポップ関数を渡さなかった。
EDIT:残りのコードは次のとおりです。
bool IntStack::isFull(){
return false;
}
bool IntStack::isEmpty(){
if(head == NULL){
return true;
}
else
return false;
}
私は残りのコードを質問に追加しました。私はそれがクラッシュする理由を解決していないので、isFalseはただ真を返します。 – user8891853
'isEmpty'がtrueを返すとき、' head'はヌルです。頭の空ポインタを使ってデータを読み込みますか?これはあなたのアプリがクラッシュする理由です。 – rafix07