2015-05-21 3 views
0

Как я могу узнать размер динамически распределенного массива? С обычным массивом, используя метод ниже, отлично работает, но я не могу сделать то же самое с динамически распределенным массивом. Пожалуйста, посмотрите и спасибо за вашу помощь.Как определить размер динамически распределенного массива (используя sizeof())?

#include <iostream> 
using namespace std; 


int main() { 
    //normal array 
    int array[5]; 
    cout << sizeof(array)/sizeof(array[0]) << endl; //this outputs the correct size 

    //dynamically allocated array 
    int *dArray = new int[5]; 
    //how to calculate and output the size here? 

    return 0; 
} 
+0

[Здесь аналогичный вопрос. Или вы можете просто использовать std :: vector. (:] [1] [1]: http://stackoverflow.com/questions/2034450/size-of-dynamically-allocated-array –

ответ

3

Это не возможно (чтобы получить действительно размер выделенного из new) в переносимым способом.

Вы можете рассмотреть возможность определения своих собственных ::operator new, но я не рекомендую это делать.

Вы должны использовать std::vector и узнать больше о C++ standard containers.

0

Вы не можете вычислить размер динамического массива, поэтому вам нужно явно указать размер массива.

#include <iostream> 
using namespace std; 


int main() { 
    //normal array 

    int array[5]; 
    cout << sizeof(array)/sizeof(array[0]) << endl; //this outputs the correct size 

    //dynamically allocated array 
    int size = 5; // array size 
    int *dArray = new int[size]; 


    return 0; 
} 
0

Он не может работать с sizeof, потому что sizeof является оператором времени компиляции, но вы просите значение времени выполнения. sizeof(dArray) - это просто синтаксический сахар для sizeof(int*), а sizeof(*dArray) - это просто синтаксический сахар для sizeof(int). Оба являются константами времени компиляции.

Причина sizeof(array) работы является то, что 5 является частью array «s типа во время компиляции (int[5]).

Смежные вопросы