Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
1

Динамическое выделение памяти

22.03.2013, 19:59. Показов 799. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Возник вопрос:
Как мне узнать адрес последнего байта в выделенной памяти?
Я выделил память (массив нулей и единиц):
C++
1
bool *b = (bool *) malloc(100);
Я хочу сохранить адрес последнего элемента (байта) этого массива в переменной. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2013, 19:59
Ответы с готовыми решениями:

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

Динамическое выделение памяти
Доброго времени суток всем!:) Есть такая проблема... Дан класс полином. который содержит закрытые...

Динамическое выделение памяти
Здравствуйте, у меня вопросик такой: почему при "динамическом выделении памяти в строку" у меня...

Динамическое выделение памяти
Всем привет, читал про динам. выделение памяти и тут возник вопрос. Так как для новичков пишут...

9
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
22.03.2013, 20:06 2
C++
1
2
bool *b = (bool *) malloc(100);
bool *last=&b[99]; // или last=b+99;
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
22.03.2013, 20:20  [ТС] 3
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    bool *b = (bool *) malloc(100);
    bool *last=&b[99];  
    if (b==NULL)
    {
        printf("ololo");
        return 1;
    }
 
    for (int i=0;i<10;i++)
    {
        b[i]=i%2;
        printf("%d ",&b[i]);
    }
    printf("%d ",&last);
 
 
    getch();
    return 0;
}
адреса переменной last и посл элемента различаются в чем ошибка?

Добавлено через 10 минут
или даже так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    bool *b = (bool *) malloc(100);
    bool *last=&b[99];  
    if (b==NULL)
    {
        printf("ololo");
        return 1;
    }
 
    printf("%d ",&b[99]);
    printf("%d ",&last);
 
 
    getch();
    return 0;
}
Добавлено через 2 минуты
вот результат:
http://i5.pixs.ru/storage/7/7/... 476779.png
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
22.03.2013, 20:22 4
C++
1
printf("%d ",&last);
так выводится адрес указателя Last -место где лежит сам last

Добавлено через 27 секунд
C++
1
printf("%d ",last);
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
22.03.2013, 20:23 5
Разные переменные - разные адреса.
0
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
22.03.2013, 20:24  [ТС] 6
ааа, благодарю, уяснил..
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.03.2013, 20:34 7
Цитата Сообщение от cripok Посмотреть сообщение
if (b==NULL)
{
printf("ololo");
return 1;
}
как Вы сделали так что у вас работает это условие? У меня длинный длинный код и часто необходимо выделять и освобождать память, решила сделать две отдельные функции для этого. Но стоит прописать это условие и сразу выдается ошибка, что это неопределенное исключение.

C++
1
2
3
4
5
6
void AlocatePicture(double* &img)
{
    if (img!=NULL)
        delete []img;
    img=new double[5];
}
Нашла инфу что вместо NULL возможно писать так же nullptr и просто 0, но вечно как только нажмешь debugging выдает сообщение о неопределенном исключении.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
22.03.2013, 23:14 8
Цитата Сообщение от Eumi Посмотреть сообщение
Нашла инфу что вместо NULL возможно писать так же nullptr и просто 0, но вечно как только нажмешь debugging выдает сообщение о неопределенном исключении.
(Можете не проверять перед delete на NULL/0/nullptr, он обязан молча жевать нули и ничего при этом не делать.)
Скорее всего вы не инициализировали тот указатель, на который передаёте ссылку. В результате delete пытается освободить память, которую вы до этого не выделяли. Всегда инициализируйте все переменные. Особенно указатели.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
22.03.2013, 23:51 9
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
(Можете не проверять перед delete на NULL/0/nullptr, он обязан молча жевать нули и ничего при этом не делать.)
Скорее всего вы не инициализировали тот указатель, на который передаёте ссылку. В результате delete пытается освободить память, которую вы до этого не выделяли. Всегда инициализируйте все переменные. Особенно указатели.
в этой функции и пытаюсь выделить память и инициализировать, то есть только в случае если указатель не равен нулю, он удаляет, а если равен выделяет память. Для освобождения память у меня другая функция:

C++
1
2
3
4
5
6
7
8
9
10
void DealocatingPicture(double* &img)
{
    if (img==NULL)
        return;
    else
    {
        delete []img;
        img=NULL;
    }
}
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
22.03.2013, 23:57 10
C++
1
2
3
4
5
6
bool *b = (bool *) malloc(100);
bool *last=&b[99];
// вот тут ошибка в том, что выделилось сто байт а не сто булов.
// размер була может отличатся от одного байта. правильно:
bool *b = (bool *) malloc(100 * sizeof(bool));
bool *last=&b[99];
0
22.03.2013, 23:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2013, 23:57
Помогаю со студенческими работами здесь

Динамическое выделение памяти
Объясните пожалуйста.Не могу понять в чём разница между malloc,calloc/free и new/delete

Динамическое выделение памяти
Доброго времени суток. Пытаюсь разобраться с динамическим выделением память. Суть: Есть...

Динамическое выделение памяти
Уважаемые программисты!!!! Подскажите как выделить память для двумерного массива. Заранее спасибо!!!

Динамическое выделение памяти
Динамически выделить память под N элементов вещественного типа float. Разработать алгоритм и...


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

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