2015-10-17 4 views
-3

я определяю свою структуру как:некорректный вывод при использовании SizeOf()

struct Shape { 
unsigned int l; // value for length 
unsigned int h; // value or height 
unsigned int b; // value for breadth 
}; 

В моей программе я выделить экземпляр Shape динамически:

Shape *image = new Shape[i]; 

и я пытаюсь распечатать размер его:

cout<< "The size of image is " << sizeof(image)<< ends; 

Независимо от того, что значение I есть я получаю тот же результат: (например: 0, 1, 2,10)

The size of the image is 8 

Почему это?

Примечание: Но когда я применить оператор SIZEOF к структуре Shape, а затем я получаю правильный ответ:

sizeof(Shape) -> returns 12 
+2

Подсказка: указатель ... – LogicStuff

ответ

3
The size of the image is 8 

Почему это?

Выход правильно, sizeof(image) дает размер переменнуюуказатель Shape* сам, а не размер выделенного массива.

+0

Я пытаюсь получить размер массива, как я могу его получить? – Mathew

+0

@Mathew Вы просто не можете с указателем, вам нужно следить за ним самостоятельно. Эта информация отсутствует. Используйте 'std :: vector ' вместо этого, не пытайтесь управлять 'new'' delete' самостоятельно. –

+0

Спасибо за то, что мне было интересно о – Mathew

4

image имеет тип Shape*, а не типа Shape, поэтому sizeof(image) дает размер Shape*.

Попробуйте sizeof(*image) вместо этого.

+0

sizeof (* image) теперь дает мне 12 независимо от значения i. Мое объявление - Shape * image = new Shape [10]; – Mathew

+0

@Mathew 'sizeof (* image)' такое же, как 'sizeof (Shape)', поэтому вы получите 12, потому что 'Shape' имеет 3' int' члена, которые по 4 байта в вашей системе. Вы пытаетесь получить размер массива? –

+0

@bku_drytt да, я пытаюсь получить размер массива, чтобы я мог динамически увеличивать размер при необходимости – Mathew