program na udostępnienie pamięci

program na udostępnienie pamięci
87
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:208
0

Witam miałem do zamiany taki program z C na C++:

Kopiuj
 #include <stdlib.h>
#include <stdio.h>
int main()
{
    int *tablica;
        if ((tablica = (int *) malloc(50*sizeof(int))) == NULL)
        {
            printf("za malo pamieci!!!\n");
            exit(1);
        }        
        printf("operacja przydzielenia pamieć została pomyślnie zakończona\n");
    return 0;
}

i zrobiłem to tak:

Kopiuj
#include <iostream>
#include <new>
#include <cstdio>

using namespace std;

int main()
{
    try
    {
       int *tab = new int[50];
       cout << "rozmiar " << 50*sizeof( *tab );
    }
    catch(std::bad_alloc)
    {
        cout << "brak pamięci" << endl;
    }
    return 0;
} 

I jak dobrze rozumiem takie coś można używać w programach by sprawdzić czy tablice na których pracujemy mieszczą się w pamięci np. jak zadeklarujemy dla tablicy 50 bitów to po przekroczeniu dostaniemy komunikat o braku pamięci? Ale nie wiem czy dobrze to zrozumiałem.

carlosmay
try rzuci wyjątek, gdy new zgłosi błąd alokacji pamięci na tablicę.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
1
  1. W praktyce nie wszędzie możesz polegać na std::bad_alloc
  2. Nie przyjmuj wyjątku przez kopię, tylko przez referencję, najlepiej const(std::bad_alloc const&)
  3. W C++ masz kontenery i smart pointery - używaj ich (std::vector<int> w tym przypadku)

87
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:208
0

czyli powinno być tak:

Kopiuj
 
#include <iostream>
#include <new>
#include <cstdio>
 
using namespace std;
 
int main()
{
    try
    {
       int *tab = new int[50];
       cout << "rozmiar " << 50*sizeof( *tab );
    }
    const(std::bad_alloc const&)
    {
        cout << "brak pamięci" << endl;
    }
    delete[] tab;
    return 0;
} 

I mam pytanie co do stosów(kontenerów) czy teraz ich się najczęściej używa zamiast new??

edytowany 2x, ostatnio: 87kelthuzad
carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
2

Pamiętaj o

Kopiuj
delete[] tab; 

.
new i delete to proszenie się o błędy. Jest std::vector i bezpieczne wskaźniki.

I mam pytanie co do stosów(kontenerów) czy teraz ich się najczęściej używa zamiast new??

Są bezpieczniejsze i nie wolniejsze od gołych tablic dynamicznych.


edytowany 1x, ostatnio: carlosmay
87
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:208
0

ok jak dojde do vector to bede już używał tylko ich

carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
1
Kopiuj
    cout << "brak pamięci" << endl;
    }
    delete[] tab; // nie jest w zasięgu tablicy tab
    return 0; 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.