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

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

Восстановить пароль Регистрация
 
Naudiz
 Аватар для Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
04.10.2013, 12:15     Определение размера данных, находящихся по адресу x #1
Приветствую!

Сабж:

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 ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 12:15     Определение размера данных, находящихся по адресу x
Посмотрите здесь:

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

Не по теме:

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

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

Не по теме:

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

Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 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++ Определение размера char** argv
Определение размера массива в функции C++

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

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

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

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

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