• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z tablicą dynamiczną: <Unable to read memory>, 0xC0000005: Access violation reading location 0x00000000.

0 głosów
249 wizyt
pytanie zadane 20 marca 2016 w C i C++ przez weewee2 Nowicjusz (150 p.)

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;
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+2 głosów
4 odpowiedzi 4,055 wizyt
pytanie zadane 19 lutego 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 1,720 wizyt
pytanie zadane 13 sierpnia 2017 w C i C++ przez wojtekd09 Początkujący (260 p.)
0 głosów
1 odpowiedź 685 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez Kyatt Początkujący (400 p.)

93,735 zapytań

142,671 odpowiedzi

323,294 komentarzy

63,297 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...