Ausnahmebedingung bei 0x003165F0 in tStack.exe: 0xC0000005: Zugriffsverletzungsleseposition 0x9BFF07EF.?Ausnahmebedingung bei 0x003165F0 in tStack.exe: 0xC0000005: Zugriffsverletzungsleseort 0x9BFF07EF.?
Ich kann nicht scheinen, das Problem in diesem Programm festzunageln. Ich bekomme Lese-/Schreibfehler wie diese an verschiedenen Stellen. Hier ist die CPP und .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;
};
ich einige Einträge gefunden was darauf hindeutet, nicht using namespace std verwenden, aber das scheint nicht zu helfen, . Habe ich nur ein totales Missverständnis darüber, wie verknüpfte Listen funktionieren?
Ihre Zeiger Mathe irgendwo ausgeschaltet ist. Sie müssen Ihr Programm debuggen, um herauszufinden, wo. – Carcigenicate
Danke, könntest du etwas für mich klären? Wenn ich sage Front-> next = temp_ptr; Habe ich Recht, wenn ich bedenke, dass der nächste Zeigerwert der Front nun darauf zeigt, auf was temp_ptr zeigt? – Perkis
Es sieht aus wie jemand anderes das Problem bereits gefunden hat. Wenn Sie jedoch einen Zugriffsverletzungsfehler erhalten, bedeutet das normalerweise, dass Sie eine Adresse falsch berechnen oder Ihren Speicher schlecht verwalten. Und es tut mir leid, es ist lange her, seit ich mich mit Zeigern beschäftigt habe, ich will dich nicht in die Irre führen. – Carcigenicate