2013-09-18 5 views
-3

У меня проблема с отображением размера массива правильно. Я знаю, что размер массива 256000, но он отображается как 8, когда я вхожу в цикл. размер будет отображаться точно, если динамическое распределение не используется. Как исправить ошибку с помощью динамического выделения?точный дисплей размера 1D-массива

+2

Возможно, вы измеряете размер указателя, указывающего на массив? – Enigma

+0

№. Размер массива – Mary

+6

Очень сложно исправить ошибку без кода, вызывающего ее. –

ответ

4

Это даст вам размер 10, потому что компилятор знает, что это массив;

char foo[10]; 
int size = sizeof foo; 

Это даст вам размер 4 в 32-битной архитектуре, поскольку это размер указателя.

char *foo = malloc(10 * sizeof(char)); 
int size = sizeof foo; 

После этого использование foo идентично. Вы можете сделать foo[2] или *foo или что угодно с обеими версиями. Но вы, вероятно, не должны брать адрес &foo с 1-м вариантом. И вы должны free(foo); иногда со вторым.

Всегда помните: sizeof не является функцией, sizeof всегда определяется во время компиляции.

+0

Также: аргументы функции - это указатели, а не массивы, поэтому этот также является указателем: 'void f (char foo [10]);'. – pts

+0

ой, что было полезно !! но как я могу получить размер как 10, используя malloc? – Mary

+0

Простой ответ: вы этого не делаете. – SzG

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