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

question-closed bład podczas wczytywania pliku binarnego c++ petla eof()

VPS Starter Arubacloud
0 głosów
558 wizyt
pytanie zadane 23 stycznia 2017 w C i C++ przez heros22pt Użytkownik (950 p.)
zamknięte 23 stycznia 2017 przez heros22pt

Witam, mam problem z macierzą ... mam wczytać z pliku binarnego dane - gdzie pierwsze 2 liczby to wysokość macierzy i szerokość macierzy, kolejne to wartości danej macierzy. Udało mi się załączyć ten plik. Program odczytuje wartości poprawnie (wysokość i szerokość jest odczytana), jednakże gdy wchodzę do pętli, wywala mi błąd przy dodawaniu wartości (pusch_back) do vector<vector<int>>macierz ... podczas debagowania program zaczymuje się dopiero w momencie który zaznaczyłem w kodzie podanym niżej:

#include<iostream>
#include<vector>
#include<fstream>

using namespace std;

void wczytaj_macierz()
{
	vector<vector<int>>macierz;
	fstream plik("macierz_A.bin", ios::in | ios::binary);

	char *temp = new char[sizeof(int)];
	plik.read(temp, sizeof(int));
	int *nr1 = (int*)temp;
	int wysokosc = *nr1;

	char *temp2 = new char[sizeof(int)];
	plik.read(temp2, sizeof(int));
	int *nr2 = (int*)temp2;
	int szerokosc = *nr2;


	while (!plik.eof())
	{
		char *temp3 = new char[sizeof(int)];
		plik.read(temp3, sizeof(int));
		int *nr1 = (int*)temp3;
		int wartosc = *nr1;
		int i = 0; int h = 0;
		if(i < szerokosc)
		{
				macierz[h].push_back(wartosc); // <-- TUTAJ PROGRAM ZATRZYMUJE SIĘ
				i++;
		}
		else{
			i = 0; h++;
		}
		
	}
	plik.close();
}
int main()
{
	wczytaj_macierz();

}

dodam jeszcze, że nie wyskakują żadne błędy oprócz tego, że w podanym momencie program zatrzymuje się i wyskakuje błąd "debug assertion filed"

jeśli ktoś wie gdzie leży błąd to będę bardzo wdzięczny. jeśli ktoś chciałby przetestować, mogę dodać plik binarny.

https://drive.google.com/open?id=0B3eIuS5jJHn_X2p3cGM1VGpxWkU

komentarz zamknięcia: Problem rozwiązany, było trzeba użyć opcji macierz.resize(...) przed kożystaniem z vectora
komentarz 23 stycznia 2017 przez Munvik Dyskutant (9,350 p.)
No bo, jeżeli tego nie zrobisz to w vectorze nie ma nic i odwołanie się do któregoś elementu (pamięci, w której nic nie ma) robi crasha.

Poza tym jeżeli byś chciał vector uzupełnić konstruktorem to robi się to () a nie {} z tego co mi wiadomo :D
komentarz 23 stycznia 2017 przez heros22pt Użytkownik (950 p.)
na studiach pokazywano mi, że inicjalizuje się (przynajmniej w stukturach) "{}", widocznie na wektorach to nie działa .. Ale dzięki, ratujesz mi nockę, bo możliwe że dzisiaj nie wpadłbym na to
komentarz 23 stycznia 2017 przez heros22pt Użytkownik (950 p.)
gdybyś dodał to w postaci odpowiedzi, dałbym "najlepsza odpowiedź", ale w komentarzu nie mogę zaznaczyć tej opcji ;D
komentarz 23 stycznia 2017 przez Munvik Dyskutant (9,350 p.)
Loozik, pozdrawiam :)
komentarz 23 stycznia 2017 przez unknown Nałogowiec (39,560 p.)

Poza tym jeżeli byś chciał vector uzupełnić konstruktorem to robi się to () a nie {} z tego co mi wiadomo :D

To mało wiesz.  

Podobne pytania

0 głosów
3 odpowiedzi 682 wizyt
pytanie zadane 23 listopada 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
–1 głos
1 odpowiedź 536 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez krystian1997 Obywatel (1,020 p.)
+1 głos
2 odpowiedzi 353 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez Wojciech Gola Nowicjusz (130 p.)

93,078 zapytań

142,042 odpowiedzi

321,446 komentarzy

62,423 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...