Problem ze zwolnieniem pamięci za pomocą delete
Ostatnio zmodyfikowano 2016-03-06 18:27
Jasiu1047 Temat założony przez niniejszego użytkownika |
Problem ze zwolnieniem pamięci za pomocą delete » 2016-03-06 03:26:17 Dzień dobry! Mam problem ze zwolnieniem pamięci w funkcji long int fib w programie. Zwolnienie pamięci dotyczy tablicy tab[n]. Ogólnie program ma liczyć sume parzystych i nie parzystych wyrazów ciągu Fibonacciego. Problem polega na tym, iż podczas pracy programu funkcja fib(), moim zdaniem zwalnia tablice, z której korzysta w kolejnym wykonaniu. Program po prostu przestaje działać po wykonaniu operacji na początkowych małych wyrazach ciągu. Byłbym bardzo wdzięczny za jakiekolwiek wskazówki jak poradzić sobie z tym problemem. #include <iostream> #include <stdio.h> using namespace std;
long int fib( int n ) { long int * tab; tab = new long int[ n ]; tab[ 0 ] = 0; tab[ 1 ] = 1; tab[ 2 ] = 1; for( int i = 3; i <= n; i++ ) { tab[ i ] = tab[ i - 1 ] + tab[ i - 2 ]; } delete[] tab; return tab[ n ]; }
int main() { cout << "Hello world!" << endl; int n, sumap = 0, suman = 0; do { cout << "Podaj numer ciagu od 1 do 100" << endl; cin >> n; cout << fib( n ) << endl; if( fib( n ) % 2 == 0 ) { sumap += fib( n ); cout << "Suma parzystych: " << sumap << endl; cout << "Suma nie parzystych: " << suman << endl; } else { suman += fib( n ); cout << "Suma parzystych: " << sumap << endl; cout << "Suma nie parzystych: " << suman << endl; } } while( n > 0 && n < 100 ); getchar(); getchar(); return 0; } |
|
mateczek |
» 2016-03-06 04:29:08 long int fib( int n ) { long int * tab; tab = new long int[ n + 1 ]; tab[ 0 ] = 0; tab[ 1 ] = 1; tab[ 2 ] = 1; for( int i = 3; i <= n; i++ ) { tab[ i ] = tab[ i - 1 ] + tab[ i - 2 ]; } long int temp = tab[ n ]; delete[] tab; return temp; }
Ogólnie w jaki sposób program ma policzyć sumę wyrazów ciągu to nie wiem. Funkcja zwraca ostatni wyraz ciągu a nie sumę. |
|
carlosmay |
» 2016-03-06 10:13:58 Problem polega na tym, iż podczas pracy programu funkcja fib(), moim zdaniem zwalnia tablice, z której korzysta w kolejnym wykonaniu. |
Ano zwalnia. Rozwiązaniem jest zwrócenie wskaźnika na tą tablicę. Zwolnienie pamięci wykonaj gdy już nie będzie potrzebna. |
|
mateczek |
» 2016-03-06 18:27:49 może tak?? W końcu aby policzyć sumę elementów, czy ostatni element ciągu nie potrzeba wcale tablicy ?? #include <iostream>
using namespace std;
struct _fib { int lastElement; long long suma_n; long long suma_p; };
_fib fib( int rozmiar ) { _fib temp; int n_2 = 0, n_1 = 1, n_0; temp.suma_n = 1; temp.suma_p = 0; for( int i = 2; i < rozmiar; i++ ) { n_0 = n_2 + n_1; n_2 = n_1; n_1 = n_0; if( n_0 % 2 == 0 ) temp.suma_p += n_0; else temp.suma_n += n_0; } temp.lastElement = n_0; return temp; }
int main() { int rozmiar; cin >> rozmiar; _fib ciag = fib( rozmiar ); cout << "suma parzystych elementow = " << ciag.suma_p << endl; cout << "suma nieparzystych elementow = " << ciag.suma_n << endl; cout << "element ostatni = " << ciag.lastElement << endl; }
|
|
« 1 » |