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

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

Войти
Регистрация
Восстановить пароль
 
cripok
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
#1

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

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

Добрый день. Возник вопрос:
Как мне узнать адрес последнего байта в выделенной памяти?
Я выделил память (массив нулей и единиц):
C++
1
bool *b = (bool *) malloc(100);
Я хочу сохранить адрес последнего элемента (байта) этого массива в переменной. Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 19:59     Динамическое выделение памяти
Посмотрите здесь:

Динамическое выделение памяти - C++
Не могу разобраться с динамическим выделением памяти. Объект - учреждение. Имеет параметры - название, тип, год основания, количество...

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

Динамическое выделение памяти - C++
Добрый день! пытаюсь освоить С++ и дошёл до раздела динамического выделения памяти. Беру пример с сайта cppstudio.com всё работает ...

Динамическое выделение памяти - C++
Подскажите как выделить динамически память мод двумерный массив... Спасибо. ... int *mass = new int ; //int *mass = new int ; ) Не...

Динамическое выделение памяти - C++
Имеется такая вот задача ! Нужно сделать что бы память выделялась динамически,а не на этапе компиляции!!! Какие будут предложения ??? ...

Динамическое выделение памяти - C++
Здравствуйте, у меня вопросик такой: почему при "динамическом выделении памяти в строку" у меня вылетает программа!? а при обычном...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 88
22.03.2013, 20:06     Динамическое выделение памяти #2
C++
1
2
bool *b = (bool *) malloc(100);
bool *last=&b[99]; // или last=b+99;
cripok
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/9/1png...68_7476779.png
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
22.03.2013, 20:22     Динамическое выделение памяти #4
C++
1
printf("%d ",&last);
так выводится адрес указателя Last -место где лежит сам last

Добавлено через 27 секунд
C++
1
printf("%d ",last);
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
22.03.2013, 20:23     Динамическое выделение памяти #5
Разные переменные - разные адреса.
cripok
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
22.03.2013, 20:24  [ТС]     Динамическое выделение памяти #6
ааа, благодарю, уяснил..
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 48
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 выдает сообщение о неопределенном исключении.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.03.2013, 23:14     Динамическое выделение памяти #8
Цитата Сообщение от Eumi Посмотреть сообщение
Нашла инфу что вместо NULL возможно писать так же nullptr и просто 0, но вечно как только нажмешь debugging выдает сообщение о неопределенном исключении.
(Можете не проверять перед delete на NULL/0/nullptr, он обязан молча жевать нули и ничего при этом не делать.)
Скорее всего вы не инициализировали тот указатель, на который передаёте ссылку. В результате delete пытается освободить память, которую вы до этого не выделяли. Всегда инициализируйте все переменные. Особенно указатели.
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 48
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;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 23:57     Динамическое выделение памяти
Еще ссылки по теме:

Динамическое выделение памяти - C++
Подскажите пожалуйста почему этот код работает: #include &lt;iostream&gt; using namespace std; int main() { int *x = new...

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

Динамическое выделение памяти! - C++
Программа должна читать с клавы число и имя(до 15 символов). Данные должны вводится в одной функции а выводится во второй. Сохранять данные...

Динамическое выделение памяти. - C++
Доброго времени суток. Помогите, пожалуйста, решить задачу. Задача тривиальна - поиск и замена подстроки. Суть в чем: необходимо...


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

Или воспользуйтесь поиском по форуму:
DU
1480 / 1056 / 45
Регистрация: 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];
Yandex
Объявления
22.03.2013, 23:57     Динамическое выделение памяти
Ответ Создать тему
Опции темы

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