Zwalnianie pamięci co jest zle, pomocy.

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

2

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

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 : )

3

Tagowanie tego jako C++ to jest kryminał.

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 ; )

0
MarekR22 napisał(a):

https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

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

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.

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