Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program w c++ - zaczytywanie plików txt + wykres

Ostatnio zmodyfikowano 2017-02-04 10:30
Autor Wiadomość
r00t
Temat założony przez niniejszego użytkownika
» 2017-01-18 22:39:03
co do c_str i atoi, string konwertuje mi na int i nawet go wypisuje bo sprawdzałem ...

Pętla może zaczytać maksymalnie 4 linie, jak dodam więcej to się wysypuje
P-156639
r00t
Temat założony przez niniejszego użytkownika
» 2017-01-18 23:40:30
dobra teraz wywala mi błąd bad_alloc.

Tu wersja kodu z która kończe na dzisiaj : http://pastebin.com/KUc3kteX.


Błąd wywala mi dokładnie przy linijce 121.

Nie potrafi przydzielić pamięci.
P-156643
j23
» 2017-01-19 11:46:04
Drobna uwaga: jak wklejasz kod do pastebina, ustaw kolorowanie składni, bo teraz całość trzeba skopiować da jakiegoś formatera, żeby dało się to czytać.
P-156653
r00t
Temat założony przez niniejszego użytkownika
» 2017-01-19 11:59:32
@jn23 : Oki, następnym razem będę pamiętał, wiesz może o co chodzi w kodzie ?
P-156656
j23
» 2017-01-19 14:38:32
Nie wiem, dlaczego dostajesz wyjątek bad_alloc, ale:
C/C++
while( getline( plik, linia ) )
{
    ...
   
    for( int i = 0; i < l; i++ )
    {
        ...
       
        PomiaryTemp = new double *[ l ]; // <--- !!!
       
       
        PomiaryTemp[ i ] = new double[ 4 ];
       
       
        for( int y = 0; y < 4; y++ ) //<--- Serio? Do tego trzeba pętli i switcha?
        {
            switch( y )
            {
            case 0:
                PomiaryTemp[ i ][ y ] = temp1I;
                break;
            case 1:
                PomiaryTemp[ i ][ y ] = temp2I;
                break;
            case 2:
                PomiaryTemp[ i ][ y ] = temp3I;
                break;
            case 3:
                PomiaryTemp[ i ][ y ] = temp4I;
                break;
            }
        }
       
        ...
    }
   
   
    l++;
}
Po co tworzysz tablicę PomiaryTemp, jeśli i tak przypisujesz tylko jedną wartość do niej? Oczywiście jest też wyciek, bo każdy obrót pętli while tworzy nową tablicę PomiaryTemp, gubiąc poprzednią. Zapewne chodzi Ci o zwiększanie wielkości tablicy, ale tego nie robi się w ten sposób. Tworzysz nową tablicę o jeden większą, kopiujesz zawartość starej tablicy do nowej, usuwasz starą, nową przypisujesz wskaźnikowi PomiaryTemp. A najlepiej będzie jeśli użyjesz vectora ;)


p.s. te same uwago odnośnie tablicy PomiaryE.
P-156657
r00t
Temat założony przez niniejszego użytkownika
» 2017-01-19 21:58:52
@j23 : z tą tablicą masz rację - teraz to zauważyłem, ale co do wartości że jest tylko 1 to nie jest jeden tylko l jak Lidia, czyli inaczej powinny zwiekszać się wiersze wraz z obrotem pętli while
P-156689
r00t
Temat założony przez niniejszego użytkownika
» 2017-01-21 23:20:52
@j23 :

Z tym whilem miałeś rację, użyłem vector, Jednak problem jest taki że wyskakuje taki błąd :

[C++ Error] Unit1.cpp(98): E2034 Cannot convert 'vector<Pomiar *,allocator<Pomiar *> >' to 'int'

[C++ Error] Unit1.cpp(98): E2092 Storage class 'auto' is not allowed here


Poniżej kod : http://pastebin.com/P7NHjsbU

Macie pomysł ?
P-156764
j23
» 2017-01-22 11:59:49
Włącz w opcjach obsługę współczesnego C++, czyli C++14.

BTW, dlaczego w vectorze trzymasz wskaźniki? Nie możesz po prostu trzymać w nim obiektów klasy Pomiar?

Jak już koniecznie musisz trzymać tam wskaźniki, użyj unique_ptr, czyli vector<unique_ptr<Pomiar>>.
P-156774
1 2 3 « 4 » 5 6
Poprzednia strona Strona 4 z 6 Następna strona