tStack.exeの0x003165F0でスローされた例外:0xC0000005:0x9BFF07EFの場所を読み取っているアクセス違反。tStack.exeの0x003165F0でスローされた例外:0xC0000005:0x9BFF07EFの場所を読み取っているアクセス違反。
私はこのプログラムでこの問題を解決できないようです。私は別の場所でこのような読み取り/書き込みエラーを取得し続けます。ここで.cppファイルと.hの
.cppファイルは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#include <string>
#include <iostream>
//using namespace std;
tStack::tStack()
{
}
tStack::~tStack()
{
}
tStack::tStack(const tStack &)
{
}
void tStack::Pop()
{
snode *tmp_ptr = NULL;
if (front)
{
tmp_ptr->next = front;
front = tmp_ptr;
free(tmp_ptr);
}
else
std::cout << "\nStack is Empty";
}
void tStack::Push(std::string op)
{
snode *tmp_ptr = front;
tmp_ptr->data = op;
if (front)
{
tmp_ptr->next = front;
front = tmp_ptr;
}
else
{
front = tmp_ptr;
front->next = NULL;
}
}
void tStack::Print()
{
snode *cur_ptr = front;
if (cur_ptr)
{
std::cout << "\nElements in Stack:\n";
while (cur_ptr)
{
std::cout << cur_ptr->data;
cur_ptr = cur_ptr->next;
}
std::cout << "\n";
}
else
std::cout << "\nStack is Empty";
}
void tStack::cStack()
{
free(front);
}
void tStack::convert(std::string postfix, tStack a)
{
int count = 0;
bool lastOper;
std::string pusher, val1, val2;
for (int i = 0; i < postfix.size(); i++)
{
if (isalpha(postfix[i]))
{
pusher = postfix[i];
a.Push(pusher);
count++;
}
else
{
if (count < 2)
{
std::cout << "There are not enough values to perform an operation.";
}
else
{
pusher = postfix[i];
val1 = front->data;
a.Pop();
val2 = front->data;
a.Pop();
a.Push(")");
a.Push(val1);
a.Push(pusher);
a.Push(val2);
a.Push("(");
}
lastOper = true;
}
}
}
.H:
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#include <string.h>
#include <iostream>
//using namespace std;
class snode
{
public:
std::string data;
snode *next;
};
class tStack
{
public:
tStack();
~tStack();
tStack(const tStack &);
void Pop();
void Push(std::string);
void Print();
void cStack();
void convert(std::string, tStack);
private:
snode *front;
};
私は名前空間stdを使用して使用していない示唆いくつかの記事を見つけましたが、それは助けていないようです。リンクされたリストがどのように機能するのかを完全に誤解していますか?
あなたのポインタ数学がどこかオフになっています。どこでプログラムをデバッグする必要があります。 – Carcigenicate
ありがとう、私のために何かをクリアすることができますか?私がfront-> next = temp_ptrと言うとき、フロントの次のポインタ値がtemp_ptrのポイントを指すことを意味すると思いますか? – Perkis
他の誰かがすでに問題を発見したようです。アクセス違反エラーが発生した場合は、通常、アドレスの計算が間違っているか、メモリ管理が不十分であることを意味します。そして、申し訳ありませんが、私は指針を扱って以来、長いことでした。私はあなたを迷子にしたくありません。 – Carcigenicate