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

[C++] Program sypie się przy wypisywaniu zmiennej.

Object Storage Arubacloud
0 głosów
147 wizyt
pytanie zadane 17 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam! Mam sobie prosty programik. Ma on pobrać od użytkownika dane. Dane te to ścieżka do pliku. Następnie program powinien otworzyć plik, wypisać wszystko co się w nim znajduje i tak cały czas. Tzn. jeśli plik zostanie zaktualizowany, to program ma to wypisać. Tutaj funkcja która jest za to odpowiedzialna:

void runTail(const char *filePath){
    system("cls");

    char *nextLine;

    ifstream stream(filePath);
    if(!stream.is_open()||!stream.good()) {
            SetConsoleTextAttribute(hl,13-1);
            cout<<"!Cannot open the file. Completing the program!";
            SetConsoleTextAttribute(hl,8-1);
            Sleep(3000);
            exit(0);
    }

    SetConsoleTextAttribute(hl,13-1);

    cout<<"ESC to exit.\n\n\n";
    SetConsoleTextAttribute(hl,16-1);
    while(1){
        if(!stream.is_open()||!stream.good()) {
                SetConsoleTextAttribute(hl,13-1);
                cout<<"!Cannot open the file. Completing the program.!";
                SetConsoleTextAttribute(hl,8-1);
                Sleep(3000);
                exit(0);
        }
        if(kbhit()){
            if(getch()==27){SetConsoleTextAttribute(hl,8-1); exit(0);};
        }

        nextLine="NULL";
        stream>>nextLine;
        cout<<nextLine<<endl;
    }
}

Program sypie się na "cout<<nextLine<<endl;". Oczywiście dodam jeszcze jedną rzecz, mianowicie char *last. Oraz if'a który będzie sprawdzać, czy kolejna linia w pliku równa się last'owi. Jeśli nie to ma ją wczytać, wypisać itd.

1 odpowiedź

+1 głos
odpowiedź 17 lutego 2018 przez the_danger Gaduła (4,800 p.)
wybrane 17 lutego 2018 przez Hiskiel
 
Najlepsza

Program się wysypuje tutaj:

stream>>nextLine;

nextLine wskazuje na stały literał tekstowy umieszczony w segmencie pamięci tylko do odczytu. Użyj stringa albo alokuj pamięć na bufor

komentarz 17 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
O nice! To prawie działa! Teraz tylko kwestia tego, że nie wiem jak to zrobić.. Dziękuję za pomoc.. A dlaczego tak się działo? Bo z pan a wypowiedzi nic nie zrozumiałem.
komentarz 17 lutego 2018 przez the_danger Gaduła (4,800 p.)
#include <string>

std::string nextLine;

A dlaczego tak się działo? Bo z pan a wypowiedzi nic nie zrozumiałem.

nextLine="NULL";

Tekst "NULL" trafia do pamięci tylko do odczytu (nie można nic modyfikować) a wskaźnik nextLine wskazuje na ten kawałek pamięci. Kiedy potem próbujesz wczytywać słowa z pliku do tego fragmentu pamięci, system zauważa, że robisz coś czego nie powinieneś (modyfikujesz pamięć tylko do odczytu) i zabija proces.

Podobne pytania

0 głosów
2 odpowiedzi 504 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez onest Początkujący (250 p.)
0 głosów
2 odpowiedzi 218 wizyt
pytanie zadane 24 sierpnia 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)
+1 głos
1 odpowiedź 194 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...