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

Program zwraca -1073741510 ale tylko po drugim wczytaniu

VPS Starter Arubacloud
0 głosów
149 wizyt
pytanie zadane 22 maja 2022 w C i C++ przez Pabllo26 Obywatel (1,280 p.)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main()
{
    int najmniej=256,najwiecej=0,skasowaneLinie=0,kontrastujace=0,tablica[200][320];
    bool tablicaL[200][320];
    fstream plik;
    plik.open("dane.txt",ios::in);
    for(int j=0;j<200;j++)
    {
        for(int i=0;i<320;i++)
        {
            tablicaL[j][i]=false;
            plik>>tablica[j][i];
            if(tablica[j][i]>najwiecej)
            {
                najwiecej=tablica[j][i];
            }
            if(tablica[j][i]<najmniej)
            {
                najmniej=tablica[j][i];
            }
        }
        for(int i=0;i<160;i++)
        {
            if(tablica[j][i]!=tablica[j][319-i])
            {
                i=164;
                skasowaneLinie++;
            }
        }
    }
    plik.close();
    for(int j=0;j<200;j++)
    {
        for(int i=0;i<320;i++)
        {
            if(abs(tablica[j][i]-tablica[j][i+1])>128&&i>319)
            {
                tablicaL[j][i]=true;
                tablicaL[j][i+1]=true;
            }
            if(abs(tablica[j][i]-tablica[j][i-1])>128&&i<0)
            {
                tablicaL[j][i]=true;
                tablicaL[j][i-1]=true;
            }
            if(abs(tablica[j][i]-tablica[j+1][i])>128&&j<199)
            {
                tablicaL[j][i]=true;
                tablicaL[j+1][i]=true;

            }
            if(abs(tablica[j][i]-tablica[j-1][i])>128&&j>0)
            {
                tablicaL[j][i]=true;
                 tablicaL[j-1][i]=true;
            }
        }
    }
    for(int j=0;j<200;j++)
    {
         for(int i=0;i<320;i++)
         {
             if(tablicaL[j][i]==true)
             {
                 kontrastujace++;
             }
         }
    }
    cout<<"6.1 Najwiecej: "<<najwiecej<<" Najmniej: "<<najmniej<<endl;
    cout<<"6.2 Skasowane: "<<skasowaneLinie<<endl;
    cout<<"6.3 Kontrastujace: "<<kontrastujace<<endl;
    plik.open("wyniki6.txt");

        plik<<"6.1 Najwiecej: "<<najwiecej<<" Najmniej: "<<najmniej<<endl;
        plik<<"6.2 Skasowane: "<<skasowaneLinie<<endl;
        plik<<"6.3 Kontrastujace: "<<kontrastujace<<endl;
    plik.close();
    return 0;
}

dane.txt były załączone w zadaniu, więc tam są. Pierwsze odpalenie po jakimś czasie działa, ale drugie nawet po lekkiej zmianie i powrocie do poprzedniego stanu nie działa. Z góry dzięki za pomoc

 

1 odpowiedź

0 głosów
odpowiedź 23 maja 2022 przez SimiVoid Pasjonat (19,790 p.)
wybrane 5 lipca 2022 przez Pabllo26
 
Najlepsza
Wczytywanie pliku działa poprawnie, ponieważ ustawiłeś odpowiedni tryb odczytu pliku.
W drugim przypadku nic nie ustawiłeś przez co domyślnie jest ustawiony tryb: std::ios::in | std::ios::out, czyli odczyt i zapis do pliku jeżeli jest on wcześniej utworzony.
Jeżeli ustawisz tryb na std::ios::out, program będzie działać poprawnie.

Kilka uwag dotyczących kodu:

1. Nigdzie nie sprawdzasz czy plik otworzony jest prawidłowo i czy jest w ogóle otwarty

2. Do każdego pliku staraj się używać osobnego obiektu std::fsteam.
1
komentarz 23 maja 2022 przez Oscar Nałogowiec (29,290 p.)
A najlepiej odpowiednio std::ifstream i std::ofstream. Wtedy problem trybu będzie załatwiony a dodatkowo kompilacja wykryje złe użycie. std:fstream (dwukierunkowy) jest naprawdę rzadko potrzebny
komentarz 26 maja 2022 przez Pabllo26 Obywatel (1,280 p.)
mimo zastosowanych poprawek program dalej się wywala. Więc to chyba raczej było nie to
komentarz 26 maja 2022 przez Oscar Nałogowiec (29,290 p.)
Dlaczego tablicę masz typu bool, wydaje się że powinna być byte (unsigned char). Nawet nie wiem jak działają operatory << i >> dla zmiennych bool. Uważaj też na jak użyjesz typów pochodnych od char - wtedy te operatory będą wczytywały i zapisywały pojedyncze znaki. Warto jakby pokazał kawałek tego pliku dane.txt.

Podobne pytania

0 głosów
0 odpowiedzi 921 wizyt
pytanie zadane 20 września 2019 w C i C++ przez KamilKerry Początkujący (390 p.)
0 głosów
3 odpowiedzi 248 wizyt
pytanie zadane 27 czerwca 2016 w C i C++ przez Kenshei Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 777 wizyt
pytanie zadane 14 listopada 2016 w C i C++ przez niezalogowany

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...