Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczne zarządzanie pamięcią

Ostatnio zmodyfikowano 2011-03-13 11:08
Autor Wiadomość
sadlawyer
Temat założony przez niniejszego użytkownika
Dynamiczne zarządzanie pamięcią
» 2011-03-13 10:59:51
Przerobiłem już podstawowy kurs C++, a dokładniej tylko to, co zostało dotychczas napisane i przeszedłem do dodatkowych materiałów. Robiłem część kursu o dynamicznym zarządzaniu pamięcią i chciałem skompilować sobie program, który autor zamieścił pod koniec kursu, aby trochę na nim poćwiczyć i zrozumieć o co chodzi w tym zarządzaniu pamięcią. Niestety nie udało mi się, gdyż kompilator mówi, że "memcpy nie jest zdeklarowany w tym zakresie". Może ktoś pomóc mi w zmodyfikowaniu tego kodu lub zaprezentować inny kod, który obejmie zagadnienia z dynamicznego zarządzania pamięcią? Kompilowałem, używając mingw.
Tu jest ten kod:
C/C++
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
    int rozmiar = 0;
    int dlugosc = 0;
    char * tablica = NULL;
    cout << "Pusty wiersz konczy dzialanie programu." << endl;
    for( int i = 0; i < 40; i++ ) cout << "-";
   
    cout << endl;
    string tWiersz;
    do
    {
        getline( cin, tWiersz );
        if( tWiersz.length() > 0 )
        {
            tWiersz += "\r\n"; //dopisanie nowego wiersza
            if( dlugosc + tWiersz.length() + 1 > rozmiar ) //potrzeba więcej pamięci niż jest dostępne
            {
                cout << "Tworzy nowy blok pamieci!" << endl;
                int tNarzutDanych = 20; //jeśli ustawisz 0 to rezerwacja będzie się odbywała za każdym razem
                rozmiar = tWiersz.length() + dlugosc + 1 + tNarzutDanych; //nowy rozmiar bloku
                char * tNoweDane = new char[ rozmiar ]; //rezerwacja nowego bloku pamięci, który pomieści stare i nowe dane
                if( tablica != NULL ) memcpy( tNoweDane, tablica, dlugosc ); //jeśli stara tablica istnieje to skopiuj dane do nowej tablicy
               
                memcpy( & tNoweDane[ dlugosc ], & tWiersz[ 0 ], tWiersz.length() ); //skopiuj dane do nowej tablicy w wyznaczone miejsce
                if( tablica != NULL ) delete[] tablica; //zwolnij pamięć zajmowaną przez stare dane
               
                tablica = tNoweDane; //nadaj nowy wskaźnik zmiennej tablica
            } else
            { //jest wystarczająca ilość pamięci nie wymagana rezerwacja
                cout << "Jest wystarczajaca ilosc miejsca!" << endl;
            }
            memcpy( & tablica[ dlugosc ], & tWiersz[ 0 ], tWiersz.length() ); //skopiuj dane do tablicy w wyznaczone miejsce
            dlugosc = tWiersz.length() + dlugosc; //zapisz długość tekstu
            tablica[ dlugosc ] = 0; //oznacz miejsce końca tekstu w tablicy
        }
    } while( tWiersz.length() != 0 );
   
    if( tablica != NULL )
    {
        cout << "Dane jakie wypisales to: " << endl;
        cout << tablica << endl;
        delete[] tablica;
    } else cout << "Nie wpisales niczego!";
   
    getch();
    return( 0 );
}
P-29115
ison
» 2011-03-13 11:04:54
#include <cstring>
P-29116
sadlawyer
Temat założony przez niniejszego użytkownika
» 2011-03-13 11:08:06
No to warto, aby autor dodał to też do tamtej części kursu. No i dzięki :)
P-29117
« 1 »
  Strona 1 z 1