• 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.

HackNation - ogólnopolski hackathon
0 głosów
243 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 1,096 wizyt
pytanie zadane 23 czerwca 2022 w C i C++ przez onest Początkujący (250 p.)
0 głosów
2 odpowiedzi 341 wizyt
pytanie zadane 24 sierpnia 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)
+1 głos
1 odpowiedź 358 wizyt

93,624 zapytań

142,544 odpowiedzi

323,031 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 968p. - dia-Chann
  2. 959p. - DziarnowskiJ
  3. 941p. - Łukasz Piwowar
  4. 940p. - CC PL
  5. 930p. - Maurycy W
  6. 913p. - Tomasz Bielak
  7. 913p. - Adrian Wieprzkowicz
  8. 906p. - ssynowiec
  9. 899p. - raydeal
  10. 889p. - rucin93
  11. 885p. - Dominik Łempicki (kapitan)
  12. 878p. - Mariusz Fornal
  13. 874p. - robwarsz
  14. 649p. - Michal Drewniak
  15. 632p. - Grzegorz Aleksander Klementowski
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...