Zwalnianie pamięci co jest zle, pomocy.

Odpowiedz Nowy wątek
2019-03-13 18:44
0
#include "pch.h"
#include <iostream>
#include <string>

using namespace std;

class sentences {
public:

    string user_add;

    int add_sentenc()
    {
        cout << "Podaj zdanie :\n";
        getline(cin, user_add);

        //cout << user_add;
        return 0;

    }

    void count_letters(){

        int how_many_letters=0;

        for (int i = 0; i < user_add.length(); i++)
        {
            if (user_add[i] > 40 && user_add[i] < 91 || user_add[i]>96 && user_add[i] < 123)how_many_letters++;
        }
        cout << "Zdanie posiada:"<<how_many_letters<<" liter.\n";

    }

    void write_one() {

        for (int i = 0; i < user_add.length(); i++)
        {
            bool secure = 0;
            if (user_add[i] != 32)
            {
                cout << user_add[i];
                secure = 1;
            }
            if (user_add[i] == 32 && secure==0)cout << endl;
        }

        cout << endl;
    }

    int numbers(int count = 0) {
        for (int i = 0; i < user_add.length(); i++)
        {

            if (user_add[i] == 44)count++;
        }
        return count;

    }
    void parts() {

         int  count = numbers()+1;
         int j=0;
        string **tab = new string*[count];

        for (int i = 0; i < user_add.length(); i++)
        {   

            tab[i] = new string [count];

            tab[i][j] = user_add[i];

                cout << tab[i][j];

                if (user_add[i] == 44)
                {
                    cout << endl;
                    j++;
                }

        }

        for (int i(0); i < count; ++i)
            delete[] tab[i]; 
        delete[] tab; 
        tab = NULL;

    }

};
int main()
{
    sentences s1;
    s1.add_sentenc();
    s1.count_letters();
    s1.write_one();
    s1.parts();
}

Wita, nie wiem co jest źle ze zwalnianiem pamięci ? pomocy

Pozostało 580 znaków

2019-03-13 19:37

Robisz:
string **tab = new string*[count];
A potem w pętli:
for (int i = 0; i < user_add.length(); i++)

Czyli tablica tab ma count elementów a ty potem iterujesz do user_add.length() i pewnie wychodzisz poza zakres


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2019-03-13 19:58
0
Shalom napisał(a):

Robisz:
string **tab = new string*[count];
A potem w pętli:
for (int i = 0; i < user_add.length(); i++)

Czyli tablica tab ma count elementów a ty potem iterujesz do user_add.length() i pewnie wychodzisz poza zakres

Tak to było to, dziękuje za pomoc : )

Pozostało 580 znaków

2019-03-13 21:12
3

Tagowanie tego jako C++ to jest kryminał.

to nie jego wina, że tak go uczą na uczelni a i tak bardziej wartościowy post niż większość w tym dziale xD - Czitels 2019-03-14 09:09

Pozostało 580 znaków

2019-03-13 21:58
1
tajny_agent napisał(a):

Tagowanie tego jako C++ to jest kryminał.

Kryminałem jest pisanie do kogoś kto się uczy w ten sposób, szkoda że nie karają tego na tym forum może wtedy było by więcej osób które pomagają niż demotywują jak Ty ; )

trochę dystansu do siebie. @tajny_agent nie miał nic do ciebie. Jedynie stwierdził nie wprost, że mieszasz C++ z C co jest bardzo złą praktyką, którą trudno wyplenić. Jeśli będziesz taki przewrażliwiony, to ciężko się będzie z tobą pracować. - MarekR22 2019-03-13 23:20
Można napisać co jest źle dzięki czemu następnym razem już tego nie będzie, liczę się z krytyka ale oczekuję też że będzie konstruktywna ; ) - Pabloo111 2019-03-14 11:37

Pozostało 580 znaków

2019-03-13 23:15
0

https://dsp.krzaq.cc/post/176[...]xx-kiedy-uzywac-new-i-delete/


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-03-13 23:20
0
MarekR22 napisał(a):

https://dsp.krzaq.cc/post/176[...]xx-kiedy-uzywac-new-i-delete/

zaraz przeczytam, to był mój pierwszy program z dynamiczna tablica string`ów : )

edytowany 1x, ostatnio: Pabloo111, 2019-03-13 23:22

Pozostało 580 znaków

2019-03-14 15:29
0
Pabloo111 napisał(a):

Kryminałem jest pisanie do kogoś kto się uczy w ten sposób, szkoda że nie karają tego na tym forum może wtedy było by więcej osób które pomagają niż demotywują jak Ty ; )

Obraziłem kogoś? Nie.
Nigdzie nie wspomniałeś, że się uczysz, więc niby skąd miałbym to wiedzieć?

Ale ok, chcesz konstruktywnej krytyki to proszę bardzo :)
1.) Nazwa klasy w liczbie mnogiej, a widzę, że może on przechowywać tylko jedną zmienną na raz
2.) Mylące funkcje. Brak parametrów i niezrozumiałe zwracane wartości
2a.) add_sentence w rzeczywistości niczego nie dodaje. I zwraca int nie wiadomo w jakim celu
2b.) Z kolei count_letters powinno zwracać liczbę liter a nic nie zwraca.
2c.) numbers ma niezrozumiały parametr. I nie ma nic wspólnego z liczbami
2d.) parts identycznie jak count_letters.
3.) Używanie magic numbers. C++ ma funkcje typu isalpha, isspace, etc.
4.) Nieuzasadnione użycie new/delete

C++ ma strumienie, inteligentne wskaźniki, kontenery, algorytmy, iteratory, wyjątki. To nie są kosmiczne technologie tylko podstawy języka. Im wcześniej to przyswoisz tym łatwiej będzie Ci pisać kod i łatwiej zrozumiesz kod pisany przez innych.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0