habe ich ein Programm, und wenn ich es debuggen stürzt und zeigt mir den Fehler:C++ Exception werfen
Ausnahme bei 0x0FC93AA8 geworfen (vcruntime140d.dll) in Projekt1.exe: 0xC0000005: Zugriffsverletzung Leseort 0x8BADB618.
Wenn für diese Ausnahme ein Handler vorhanden ist, kann das Programm sicher fortgesetzt werden.
Irgendwelche Ideen, was könnte es sein?
#include <iostream>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
class bendraAbonentoInformacija
{
public:
string vardasPavarde;
string asmensKodas;
string adresas;
double suma;
string tiekejas;
};
class elektra : public bendraAbonentoInformacija
{
public:
double tarifas;
int skaitiklisNuo;
} rect;
class siuksles : public bendraAbonentoInformacija
{
public:
int kvadratura;
};
class vanduo : public bendraAbonentoInformacija
{
public:
int saltasVanduo;
int sildymas;
};
void nuskaitymas(int& i, bendraAbonentoInformacija masyvas[], elektra elektrosMasyvas[], siuksles siuksliuMasyvas[], vanduo vandensMasyvas[])
{
ifstream duomenuNuskaitymas;
duomenuNuskaitymas.open ("duomenys.txt");
string vardasPavarde;
string asmensKodas;
string adresas;
double suma;
string tiekejas;
int tarifas;
double skaitliukas;
int kvadratura;
int saltasVanduo;
int sildymas;
i = 0;
if (duomenuNuskaitymas.is_open())
{
while (!duomenuNuskaitymas.eof())
{
duomenuNuskaitymas >> masyvas[i].vardasPavarde >> masyvas[i].asmensKodas >> masyvas[i].adresas >> masyvas[i].suma >> masyvas[i].tiekejas;
if (masyvas[i].tiekejas == "Vilniaus energija")
{
duomenuNuskaitymas >> elektrosMasyvas[i].tarifas >> elektrosMasyvas[i].skaitiklisNuo;
}
else if (masyvas[i].tiekejas == "Kauno svara")
{
duomenuNuskaitymas >> siuksliuMasyvas[i].kvadratura;
}
else if (masyvas[i].tiekejas == "Rokiskio vandenys")
{
duomenuNuskaitymas >> vandensMasyvas[i].saltasVanduo >> vandensMasyvas[i].sildymas;
}
i++;
}
duomenuNuskaitymas.close();
}
else cout << "Unable to open file";
}
void PaieskaPagalAsmensKodaIrRikiavimas(int i, bendraAbonentoInformacija masyvas[])
{
string AsmensKodas;
bendraAbonentoInformacija abonentas[1000];
bendraAbonentoInformacija Kintamasis;
int k = 0;
cout << "Iveskite asmens, kurio saskaitos ieskote, asmens koda: ";
cin >> AsmensKodas;
cout << "Rasta informacija:" << endl;
for (int j = 0; j < i; j++)
{
if (AsmensKodas == masyvas[j].asmensKodas)
{
cout << masyvas[j].vardasPavarde << masyvas[j].adresas << masyvas[j].asmensKodas << masyvas[j].suma;
abonentas[k] = masyvas[j];
k++;
}
}
for (int i = 0; i < k; i++)
{
if (abonentas[i].suma < abonentas[i + 1].suma)
{
Kintamasis = abonentas[i];
abonentas[i] = abonentas[i + 1];
abonentas[i + 1] = Kintamasis;
}
}
for (int i = 0; i < k; i++)
{
cout << abonentas[i].vardasPavarde << abonentas[i].suma;
}
}
int main()
{
int i;
bendraAbonentoInformacija masyvas[1000];
elektra elektrosMasyvas[1000];
siuksles siuksliuMasyvas[1000];
vanduo vandensMasyvas[1000];
nuskaitymas(i, masyvas, elektrosMasyvas, siuksliuMasyvas, vandensMasyvas);
//PaieskaPagalAsmensKodaIrRikiavimas(i,masyvas);
return 0;
}
Ich könnte hier vielleicht die Sprachbarriere überwinden, aber ohne die Eingabedatei ist es schwer zu reproduzieren. –
Sie können versuchen, den fehlerhaften Code in einen 'try {...} catch (...) {}' Block zu setzen, aber ich denke, dass Sie eher den Grund für die Zugriffsverletzung finden sollten. Da Sie Ihr Programm bereits debuggt haben, könnten Sie die Zeile in Ihrem Programm markieren, die die Zugriffsverletzung verursacht? – chtz