Witam,
stworzyłem funkcję tab_open() , która tworzy tablicę dynamiczną oraz funkcję tab_search która z niej korzysta.
Problemem jest błąd w 137 linijce kodu, gdzie kompilator wywala błąd jak w tytule. Wygląda to tak jakby tablica nie istniała, jednak couty w tab_open wyraźnie wypisują dobrze wczytane elementy z pliku.
Czy ktoś wie dlaczego pojawia się taki komunikat? Z góry dziękuję za odpowiedź.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void file_open(fstream &plikowa);
void tab_open(int &m1, int &m2, fstream &plikowa, int *tablica1, int *tablica2, int *tablica3, int &s);
void search(int &m1, int &m2, int *tablica1, int *tablica2, int *tablica3, int &s, int &l);
bool check(int pom, int *tablica3, int &s);
int main()
{
int m1, m2, size, licznik = 0;
fstream file;
int *tab1 = nullptr;
int *tab2 = nullptr;
int *tab3 = nullptr;
file_open(file);
tab_open(m1, m2, file, tab1, tab2, tab3, size);
search(m1, m2, tab1, tab2, tab3, size, licznik);
delete[] tab1;
delete[] tab2;
delete[] tab3;
cin.get();
cin.get();
return 0;
}
void file_open(fstream &plikowa)
{
string nazwa;
int l1 = 0;
int l2 = 2;
do
{
cout << "Podaj nazwe pliku: ";
cin >> nazwa;
plikowa.open(nazwa, ios::in);
if (!plikowa)
{
if (l2 == 0)
{
cout << "Nie udalo sie otworzyc piku. Program zostanie zamkniety.";
cin.get();
cin.get();
exit(0);
}
cout << "Niepoprawna nazwa pliku lub plik nie istnieje!" << endl << "Sproboj ponownie. Pozostalo prob: " << l2 << endl;
l2--;
}
l1++;
} while (l1 < 3 && !plikowa);
}
void tab_open(int &m1, int &m2, fstream &plikowa, int *tablica1, int *tablica2, int *tablica3, int &s)
{
plikowa >> m1;
try
{
tablica1 = new int[m1];
}
catch (bad_alloc)
{
cout << "Nie udalo sie otworzyc tablicy. Program zostanie zamkniety.";
cin.get();
exit(0);
}
for (int i = 0; i < m1; i++)
{
plikowa >> *(tablica1 + i);
cout << *(tablica1 + i) << endl;
}
cout << "tablica poczatek: " << *tablica1 << endl;
plikowa >> m2;
try
{
tablica2 = new int[m2];
}
catch (bad_alloc)
{
cout << "Nie udalo sie otworzyc tablicy. Program zostanie zamkniety.";
cin.get();
exit(0);
}
for (int i = 0; i < m2; i++)
{
plikowa >> *(tablica2 + i);
cout << *(tablica2 + i) << endl;
}
cout << "tablica poczatek: " << *tablica2 << endl;
if (m1 < m2)
{
try
{
tablica3 = new int[m1];
s = m1;
}
catch (bad_alloc)
{
cout << "Nie udalo sie otworzyc tablicy. Program zostanie zamkniety.";
cin.get();
exit(0);
}
}
else
{
try
{
tablica3 = new int[m2];
s = m2;
}
catch (bad_alloc)
{
cout << "Nie udalo sie otworzyc tablicy. Program zostanie zamkniety.";
cin.get();
exit(0);
}
}
}
void search(int &m1, int &m2, int *tablica1, int *tablica2, int *tablica3, int &s, int &l)
{
cout << "tablica 1: " << *tablica1; // TU WYWALA BŁĄD PRZY PRÓBNYM COUT
int *wsk = tablica3;
for (int i = 0; i < m1; i++)
{
cout << "Element 1 tablicy: " << i << " " << *tablica1 << endl;
for (int j = 0; j < m2; j++)
{
cout << "Element 2 tablicy: " << j << " " << *tablica2 << endl;
if (*(tablica1 + i) == *(tablica2 + j))
{
cout << "Natknalem sie na rowne elementy." << endl;
if (check(*tablica1, tablica3, s) == false)
{
cout << "Przeszukujac tablice 3 nie natknalem sie na takie same." << endl;
*wsk = *(tablica1 + i);
l++;
cout << "Tablica wynikowa: " << *wsk << endl << "Licznik: " << l;
wsk++;
}
}
}
}
}
bool check(int pom, int *tablica3, int &s)
{
bool flag = false;
for (int i = 0; i < s; i++)
{
if (*(tablica3 + s) == pom)
{
flag = true;
}
}
return flag;
}