[C++]Sprawdzenie poprawności kodu.
Ostatnio zmodyfikowano 2018-08-15 22:50
Damek Temat założony przez niniejszego użytkownika |
[C++]Sprawdzenie poprawności kodu. » 2018-08-15 21:56:43 Witam wszystkich, przerabiam kurs C++ dostępny na owej witrynie i ostatnio natknąłem się na temat wskaźników, struktur i dynamicznej alokacji pamięci. Samodzielnie napisałem program implementujący stos. Zdaję sobie sprawę, że istnieją gotowe biblioteki, jednak zależy mi na zrozumieniu jak ta struktura działa. Chciałbym prosić kogoś doświadczonego o sprawdzenie poprawności kodu(przede wszystkim czy nie ma nigdzie wycieków pamięci). Nie jestem jeszcze na tyle daleko w kursie, dlatego wykorzystałem w tym celu struktury a nie klasy. #include "stdafx.h" #include <iostream> #include "conio.h"
struct Stack { int m_value; Stack * m_next; };
void push( Stack *& top, int value ) { Stack * temp = new Stack; temp->m_value = value; temp->m_next = top; top = temp; }
void print( Stack * top ) { while( top != nullptr ) { std::cout << top->m_value << "\n"; top = top->m_next; } }
void pop( Stack *& top ) { Stack * temp = top; if( temp ) { top = nullptr; top = temp->m_next; delete temp; } return; }
bool empty( Stack * top ) { if( top != nullptr ) return false; return true; }
int size( Stack * top ) { int i = 0; while( top != nullptr ) { top = top->m_next; i++; } return i; }
int main() { Stack * top = nullptr; std::cout << "Size: " << size( top ) << "\nEmpty: " << empty( top ) << "\n\n"; push( top, 7 ); push( top, 22 ); push( top, 54 ); push( top, 81 ); print( top ); std::cout << "\nSize: " << size( top ) << "\nEmpty: " << empty( top ) << "\n"; pop( top ); std::cout << "\n"; print( top ); std::cout << "\nSize: " << size( top ) << "\nEmpty: " << empty( top ) << "\n"; while( !empty( top ) ) pop( top ); _getch(); return 0; }
|
|
pekfos |
» 2018-08-15 22:27:04 Nie ma niszczenia stosu na koniec programu, więc jest wyciek pamięci, jeśli stos nie jest wtedy pusty. |
|
Damek Temat założony przez niniejszego użytkownika |
» 2018-08-15 22:35:29 @up
Dziękuje za pomoc. Poprawiłem! :) |
|
pekfos |
» 2018-08-15 22:37:53 To nie jest poprawione. |
|
Damek Temat założony przez niniejszego użytkownika |
» 2018-08-15 22:40:33 @up
A mógłbyś mnie nakierować w jaki sposób powinienem to zrobić? Wskaźniki i dynamiczna alokacja pamięci to dość trudny dla mnie temat i właśnie staram się go opanować. |
|
pekfos |
» 2018-08-15 22:41:57 Myślisz w zupełnie złym kierunku. while( !empty( top ) ) pop( top ); |
|
Damek Temat założony przez niniejszego użytkownika |
» 2018-08-15 22:50:06 @up
Faktycznie, przeanalizowałem jeszcze raz cały program i zrozumiałem o co Panu chodziło oraz zrozumiałem swój błąd. Ponownie dziękuje. |
|
« 1 » |