• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozmiar dynamicznej tablicy

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
236 wizyt
pytanie zadane 21 lutego 2018 w C i C++ przez Mihost Nowicjusz (240 p.)
Witam,

czytałem po forach czy jest sposób na sprawdzenie rozmiaru dynamicznie zaalokowanej tablicy - wszędzie czytam iż nie ma.

W książce Stephena Praty (Prata?) jest napisane, że można do tego użyć sizeof - mam wypożyczone wydanie V więc być może to jakiś błąd/przedawnienie. (A może jednak jakoś się da?)

Zastanawia mnie tylko jedno - czy na pewno nie można jakoś "wyłuskać" tego rozmiaru? Czy program nie trzyma gdzieś go? W końcu jak mógłby zwolnić pamięć za pomocą delete[] skoro nie znałby rozmiaru tablicy/ilości zaalokowanych bitów/bajtów.

2 odpowiedzi

+2 głosów
odpowiedź 21 lutego 2018 przez j23 Mędrzec (190,220 p.)

W końcu jak mógłby zwolnić pamięć za pomocą delete[] skoro nie znałby rozmiaru tablicy/ilości zaalokowanych bitów/bajtów.

Ilość elementów tablicy z reguły zapisywana jest na ujemnym offsecie i (może być) tylko dla typów z destruktorem. Oczywiście standard nie definiuje tego, dlatego nie powinieneś opierać swojego programu o takie wydłubywanie wielkości tablicy. Użyj lepiej klasy std::vector.

 

0 głosów
odpowiedź 21 lutego 2018 przez jpacanowski VIP (102,420 p.)

czytałem po forach czy jest sposób na sprawdzenie rozmiaru dynamicznie zaalokowanej tablicy - wszędzie czytam iż nie ma.

http://man7.org/linux/man-pages/man3/malloc_usable_size.3.html

size_t malloc_usable_size (void *ptr);
komentarz 21 lutego 2018 przez Mihost Nowicjusz (240 p.)

Czy działa to tylko na Linuxie? 

Korzystam z Windows 7 oraz Visual Studio. Po dołączeniu 

#include <malloc.h>

dostaje komunikat

malloc_usable_size() is undefined

Czy ten plik nagłówkowy powinienem w takim wypadku jakoś wgrać?

2
komentarz 21 lutego 2018 przez j23 Mędrzec (190,220 p.)

Ta funkcja nie wchodzi w skład biblioteki C, dlatego nie masz jej w Windowsie. Zresztą w dokumentacji masz napisane, że: This function is a GNU extension.

 

Standard C i C++ nie oferuje funkcji zwracającej wielkość przydzielonej pamięci.

Podobne pytania

0 głosów
3 odpowiedzi 1,620 wizyt
0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Quegon23 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 278 wizyt
pytanie zadane 25 marca 2020 w C i C++ przez PgK Obywatel (1,380 p.)

90,828 zapytań

139,504 odpowiedzi

313,594 komentarzy

60,325 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...