logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ - Jak naprawić błąd alokacji pamięci przy odczycie pliku z liczbami?

ibefree 13 Mar 2013 00:19 1524 6
REKLAMA
  • #1 12053521
    ibefree
    Poziom 9  
    Posty: 15
    Witam,

    Mam takie zadanie:

    Na dysku jest plik, gdzie dane są zapisane w takim formacie np.

    5

    1 3 2 1 2

    7

    2 4 3 3 2 1 1

    gdzie, pierwsza liczba określa ilość liczb w pierwszym ciągu, następnie są liczby z tego ciągu, później liczba określająca ilość liczb w drugim ciągu i poniżej te liczby. Mam je odczytać z pliku, sprawdzić czy liczby w ciągu się powtarzają oraz dać na wyjście ile liczb się powtórzyło i je wypisać w kolejności takiej jak występowały powtórzenia np.

    3

    1

    3

    2

    Napisałem taki kod:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Program się kompiluje, ale podczas uruchomienia dostaję błąd alokacji pamięci, poza tym jak ustawić dobrze warunki w pętli sprawdzającej czy powtarzają się elementy w 1 i 2 ciągu pobranego z pliku (T_1 i T_2)?

    Z góry dzięki za pomoc i proszę o wyrozumiałość ponieważ dopiero startuje z nauką programowania.
  • REKLAMA
  • #2 12054115
    Mardok2
    Poziom 18  
    Posty: 421
    Pomógł: 17
    Ocena: 55
    A to nie jest tak, że z piku zczytujesz do strumienia potem do string stream i do piero możesz zrobić konwersje do typu całkowitego . Wiadomo alokujesz przez new dynamicznie wiec dopiero w programie wyskakuje błąd. :) Nie zagłebiałem sie w kod.
  • REKLAMA
  • #3 12054401
    beluosus
    Poziom 25  
    Posty: 362
    Pomógł: 123
    Ocena: 18
    Nie czytałem całości, ale od razu rzuca się w oczy:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Wpisujesz do T_1[i] gdzie i == m - 1 (warunek i<=m-1). Oczywiście to jest o jeden indeks za daleko.
  • #4 12054967
    ibefree
    Poziom 9  
    Posty: 15
    Mardok2 możesz jaśniej? Jak mam to poprawnie zrobić aby działało?

    beluosus czyli w pętli for musi być do i<=m-2?

    Co z resztą błędów?
  • REKLAMA
  • #5 12055361
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    ibefree napisał:
    beluosus czyli w pętli for musi być do i<=m-2?

    A ile liczb chcesz wczytać i umieścić w tablicy? Jak alokujesz tablicę to podajesz jej rozmiar, a nie indeks ostatniego elementu.
  • #6 12057058
    ibefree
    Poziom 9  
    Posty: 15
    Wykonałem coś takiego, otwiera plik i analizuje poprawnie. Jak dodam funkcje zapisz do pliku do wywala błąd alokacji pamięci, jak to poprawić? Bardzo proszę o pomoc.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #7 12060009
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    <offtop> masakra...</offtop>

    Ale jeżeli chodzi o błąd pamięci, to powiedz, dlaczego tak:
    Cytat:

    unsigned *ciag = odczytaj_porownaj(plik,lpowtorek);

    otworz(plik);
    odczytaj_porownaj(plik,lpowtorek);
    zapisz_wynik(lpowtorek,ciag);

Podsumowanie tematu

✨ Użytkownik ma problem z alokacją pamięci w programie C++, który odczytuje dane z pliku. Plik zawiera liczby, gdzie pierwsza liczba określa ilość elementów w ciągu, a następnie następują liczby. W odpowiedziach zwrócono uwagę na błędy w alokacji tablicy oraz na konieczność poprawienia warunków pętli for, aby nie przekraczać indeksów tablicy. Użytkownik zaktualizował kod, ale nadal napotyka błąd alokacji pamięci przy dodawaniu funkcji zapisu do pliku. Wskazano, że alokacja powinna być zgodna z rozmiarem tablicy, a nie z indeksem ostatniego elementu.
Wygenerowane przez model językowy.
REKLAMA