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

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

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

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

04.10.2013, 12:15. Просмотров 380. Ответов 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 ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
04.10.2013, 12:21     Определение размера данных, находящихся по адресу x #2
C++
1
cout << n*sizeof(n) << endl;   // размер в байтах массива, аллокированного calloc
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
04.10.2013, 12:24     Определение размера данных, находящихся по адресу x #3
C++
1
cout << sizeof(*a) * n << endl;
Это?
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
04.10.2013, 13:16  [ТС]     Определение размера данных, находящихся по адресу x #4
Нет, данные варианты не подходят. Я пытаюсь написать функцию, которая возвращает размер структуры данных находящейся по передаваемому ей адресу. (массива, объекта, пока только массива)Поэтому условие, что n не известно. (без использования n)
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
04.10.2013, 13:24     Определение размера данных, находящихся по адресу x #5
Легальными способами - никак. Нелегальные (хаки) - будут работать на одном конкретном компиляторе и одной конкретной ОС. Чуть что изменится - все поломается....
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
04.10.2013, 13:24     Определение размера данных, находящихся по адресу x #6
Naudiz, а вы задайте себе вопрос как определить конец массива и что будет если обратиться к элементу по адресу находящемуся вне массива посредством указателя на него. И все станет ясно.
Кликните здесь для просмотра всего текста
Никак

Не по теме:

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

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

Не по теме:

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

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 14:23     Определение размера данных, находящихся по адресу x
Еще ссылки по теме:

Определение размера массива в функции C++
C++ Определение размера динамического массива
C++ Определение размера строки массива строк
C++ Определение размера типа переданного в шаблон
Преобразование числа в символ и определение размера, C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,708
Записей в блоге: 2
Завершенные тесты: 1
04.10.2013, 14:23     Определение размера данных, находящихся по адресу x #12
Цитата Сообщение от Algoritmer Посмотреть сообщение
Явный недочет разработчиков стандарта С++. В других языках программирования возможно получить верхнюю границу динамического массива или кол-во элементов
Для массива и в C++ можно получить, а для динамически выделяемой памяти только не стандартными средствами, если таковые предоставляет компилятор

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

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
т.е. почему нет проверки выхода за размер массива
потому что стараются придерживаться идиомы "Не нужно платить за то, что не используется"
Yandex
Объявления
04.10.2013, 14:23     Определение размера данных, находящихся по адресу x
Ответ Создать тему
Опции темы

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