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

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

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

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

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

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

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

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

Динамическое выделение памяти - C++
Почему распечатка матрицы Matr1 в f2 дает матрицу из ед., а в f1 матрицу из нулей? Ведь адрес первого эл. массива Matr2 сохранен в...

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

Динамическое выделение памяти - C++
есть код: int u = 0; char* mstrcat(char *str1, char *str2) { u = sizeof(str1); // *str1 = new char; char *res = str1; ...

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

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

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

Динамическое выделение памяти - C++
У меня есть двумерный булевый квадратный массив. После запуска программы, я получаю переменную size, это то, сколько элементов должно быть...

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

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

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


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

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

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