-1
我做了一個節目,當我調試崩潰,並顯示我的錯誤:C++異常拋出
異常在PROJECT1.EXE在0x0FC93AA8(vcruntime140d.dll)拋出:0000005:訪問衝突讀取位置0x8BADB618。
如果有這種異常的處理程序,程序可能會安全地繼續。
任何想法可能是什麼?
#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;
}
我可能會在這裏超過語言障礙,但沒有輸入文件很難重現。 –
您可能會嘗試將有問題的代碼放入try {...} catch(...){}塊中,但我認爲您應該找出訪問衝突的原因。由於您已經調試過程序,您是否可以在程序中標記導致訪問衝突的行? – chtz