Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
#1

Определение размера данных, находящихся по адресу x - C++

04.10.2013, 12:15. Просмотров 397. Ответов 11
Метки нет (Все метки)

Приветствую!

Сабж:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    int n;
    cin >> n;
    int *a = (int*)calloc(n,sizeof(n));
    cout << sizeof(*a);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Как вывести размер массива в байтах, содержащегося в a ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 12:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение размера данных, находящихся по адресу x (C++):

Определение размера массива - C++
Привет всем у меня несколько вопросов по языку си (компилятор gcc). 1) Есть, например след код: char* sym; char c = 'a'; ...

Определение размера файла - C++
Здравствуйте, я учусь на программиста, нужна помощь в программе. #include &lt;fstream.h&gt; #include &lt;windows.h&gt; #include &lt;iostream&gt; ...

Определение размера массива - C++
Код: template &lt;class T,int N&gt; int arr_sz(T (&amp;arr)) {return N;} void sum(int a){cout&lt;&lt;a;}; int main() {

Определение размера char** argv - C++
Есть массив строк char** argv где я знаю число строк argc for (int i = 0; i &lt; argc; i++){ printf(&quot;%s \n&quot;,argv); } char**...

Определение размера динамического массива - C++
Вопрос может не много глупый, но я подзабыл с. Считаю размер динамического массива и результат получается неверный, логическую ошибку...

Определение размера массива в функции - C++
Всем доброго дня ! Подскажите пожалуйста, как можно определить размер массива в функции ? запись int n = sizeof(a)/sizeof(int);...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
04.10.2013, 12:21 #2
C++
1
cout << n*sizeof(n) << endl;   // размер в байтах массива, аллокированного calloc
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
04.10.2013, 12:24 #3
C++
1
cout << sizeof(*a) * n << endl;
Это?
0
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
04.10.2013, 13:16  [ТС] #4
Нет, данные варианты не подходят. Я пытаюсь написать функцию, которая возвращает размер структуры данных находящейся по передаваемому ей адресу. (массива, объекта, пока только массива)Поэтому условие, что n не известно. (без использования n)
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
04.10.2013, 13:24 #5
Легальными способами - никак. Нелегальные (хаки) - будут работать на одном конкретном компиляторе и одной конкретной ОС. Чуть что изменится - все поломается....
1
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
04.10.2013, 13:24 #6
Naudiz, а вы задайте себе вопрос как определить конец массива и что будет если обратиться к элементу по адресу находящемуся вне массива посредством указателя на него. И все станет ясно.
Кликните здесь для просмотра всего текста
Никак

Не по теме:

CheshireCat, опять вы меня опередили

1
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
04.10.2013, 13:38  [ТС] #7
Благодарю, я совсем забыл, что при динамическом выделении памяти последняя ячейка никак не помечается
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
04.10.2013, 13:38 #8
Цитата Сообщение от CheshireCat Посмотреть сообщение
Легальными способами - никак
Явный недочет разработчиков стандарта С++. В других языках программирования возможно получить верхнюю границу динамического массива или кол-во элементов
Цитата Сообщение от Naudiz Посмотреть сообщение
Я пытаюсь написать функцию, которая возвращает размер структуры данных
Как вариант, добавить в эту структуру поле и запоминать в него размер. (При создании он нам известен)
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.10.2013, 13:52 #9
Цитата Сообщение от Algoritmer Посмотреть сообщение
Явный недочет разработчиков стандарта С++. В других языках программирования возможно получить верхнюю границу динамического массива или кол-во элементов
Используйте std::vector
0
Ilot
04.10.2013, 14:10
  #10

Не по теме:

Цитата Сообщение от Algoritmer Посмотреть сообщение
Явный недочет разработчиков стандарта С++. В других языках программирования возможно получить верхнюю границу динамического массива или кол-во элементов
Очень много говориться о том, что С++ это гибкий язык. Кажется даже у самого Страуструпа говорится об этом(т.е. почему нет проверки выхода за размер массива)

0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
04.10.2013, 14:15 #11
Цитата Сообщение от Ilot Посмотреть сообщение
почему нет проверки выхода за размер массива

Не по теме:

тлетворное родство с С

0
Croessmah
Эксперт CЭксперт С++
13221 / 7493 / 845
Регистрация: 27.09.2012
Сообщений: 18,413
Записей в блоге: 3
Завершенные тесты: 1
04.10.2013, 14:23 #12
Цитата Сообщение от Algoritmer Посмотреть сообщение
Явный недочет разработчиков стандарта С++. В других языках программирования возможно получить верхнюю границу динамического массива или кол-во элементов
Для массива и в C++ можно получить, а для динамически выделяемой памяти только не стандартными средствами, если таковые предоставляет компилятор

Добавлено через 51 секунду
Цитата Сообщение от Algoritmer Посмотреть сообщение
Как вариант, добавить в эту структуру поле и запоминать в него размер. (При создании он нам известен)
А если вдруг перераспределение памяти, то везде менять эту штуку? А если вдруг копирование?

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
т.е. почему нет проверки выхода за размер массива
потому что стараются придерживаться идиомы "Не нужно платить за то, что не используется"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 14:23
Привет! Вот еще темы с ответами:

Определение размера одномерного массива - C++
Добрый день. Необходимо задать размер одномерного массива. В цикле for стоит переменная - счетчик, которая увеличивается на единицу при...

Определение размера массива + sizeof - C++
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта. #include &lt;iostream&gt; using...

Преобразование числа в символ и определение размера, - C++
Вот что я написал: #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; void main() { const int n=5; int M={8,2,3,4,5}; ...

Определение размера строки массива строк - C++
Здравствуйте! Visual C++ char *my_string={&quot;Это первая строка&quot;, &quot;Это вторая строка&quot;, &quot;Это третья строка&quot;, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.10.2013, 14:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru