このリンクリストのスタックを理解するのが世界で最も困難です。私は編集が許可されていない固定の ".h"ファイルを与えられています。プッシュとポップの機能を書いています。しかし、私のポップアップ機能はプログラムをクラッシュさせているのですが、私はその理由を不明です。私のポップ機能は次の通りです:C++リンクリストスタックポップ関数クラッシュ
int IntStack::pop(){
int result = -1;
if(isEmpty()){
result = head->data; //program crashes here
Node *temp;
temp = head->next;
delete head;
head = temp;
}
return result;
}
私のノードは以下の通りです。なぜこれがクラッシュするとどのように私はそれを修正することができますするよう
struct Node{
int data;
Node* next;
};
任意の洞察力 いただければ幸いです。また、関数にパラメータを持たせることはできません。ありがとうございました
編集:私は機能に変更を提案し、ここに私のコードの残りの部分です。
#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();
}
私は私が私のポップ機能の頭の上に無効なポインタを持っているかもしれないと思うが、私はわかりませんよ。それとも私のプッシュ機能ですか?
void IntStack::push(int data){
assert(!isFull());
Node *temp = new Node;
temp->data = data;
temp->next = NULL;
temp = head;
}
デバッガでコードを実行してみましたか? –
'assert(isEmpty());'は、要素を削除しようとすると良い前提条件のようには見えません。 –