71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
1

Выделение памяти и обращение к ней

04.05.2015, 22:43. Показов 1010. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Вопрос таков: как обратиться к конкретным участкам памяти, если размер в байтах не равен стандартным размерам типов? Например, я выделил память с помощью calloc под 5 объектов, размером по 8 байт каждый в указатель void *Data, и требуется в каждый (или не каждый) занести информацию, не превышающую размера одного элемента.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 22:43
Ответы с готовыми решениями:

Выделение области и обращение к ней через макрос (Word)
Всем привет, возможно ли в word выделить какую-то область, и через макрос к нему обращаться? То...

Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде...

Стек, куча, хранение в памяти, динамическое выделение памяти, указатели в чем отличие?
Здравствуйте. Прочитал кучу определений но никак не пойму вообще что к чему. 1)Стек - это якобы...

Вектор, утечка памяти, функция создания и выделение памяти
Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при...

3
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.05.2015, 22:49 2
Лучший ответ Сообщение было отмечено casper007 как решение

Решение

Цитата Сообщение от casper007 Посмотреть сообщение
если размер в байтах не равен стандартным размерам типов?
Всегда есть char, который по определению размером 1 байт.
Цитата Сообщение от casper007 Посмотреть сообщение
с помощью calloc
Для C++ используй new со всеми вытекающими.
1
2662 / 2237 / 240
Регистрация: 03.07.2012
Сообщений: 8,138
Записей в блоге: 1
04.05.2015, 22:55 3
Память выделяется одним куском и ты можешь запихать туда объекты самых разных размеров, лишь бы не выйти за размер куска. А чтобы объекты не перекрывались - следи сам
1
18828 / 9831 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
04.05.2015, 22:59 4
casper007, если я правильно понял, то предоставь это конструкторам:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <cstring>
#include <new>
 
struct Mem
{
    int av;
    int bv;
    
    Mem(int a, int b) : av(a), bv(b) {}
};
 
int main()
{
    std::cout << sizeof(Mem) << std::endl;
    
    void * raw = calloc(5, sizeof(Mem));
    // тут должны быть проверка на успешность
 
    size_t i = 0;
    for(Mem * begin = static_cast<Mem*>(raw); i < 5; ++i)
    {
        ::new(begin + i) Mem(1, 2); // инициализируем память с помощью конструктора
    }
    
 
    //что-то делаем
    //...............
   
    
    i = 5;
    for(Mem * begin = static_cast<Mem*>(raw); i-- > 0; )
    {
        (begin + i)->~Mem();
    }
    free(raw);
}
Но в таком случае проще использовать new\delete
Если конечно у тебя нет каких-то специфических требований.
1
04.05.2015, 22:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2015, 22:59
Помогаю со студенческими работами здесь

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки...

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

База данных MySQL и обращение к ней
Собственно вопрос в том , как сделать обращение в баззу данных при помощи браузера . Я знаю ,что...

Обращение к строке двумерного массива и работа с ней
Собственно задача: Дан двумерный массив целых чисел. а) Составить программу, определяющую, верно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru