Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
cripok
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 15
1

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

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

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

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

Динамическое выделение памяти
Дан такой код:#include "stdafx.h" #include <stdio.h> #include <stdlib.h> ...

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

Динамическое выделение памяти
Подскажите пожалуйста почему этот код работает: #include <iostream> using...

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

9
SDev
43 / 41 / 31
Регистрация: 15.03.2013
Сообщений: 90
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
Кудаив
410 / 409 / 72
Регистрация: 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
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,803
Записей в блоге: 2
Завершенные тесты: 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 / 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
OhMyGodSoLong
~ Эврика! ~
1247 / 996 / 74
Регистрация: 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 / 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
1488 / 1134 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 23:57

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

динамическое выделение памяти
дана целочисленная прямоугольная матрица. определить: 1) количество строк, не...

Динамическое выделение памяти
Вот у меня есть 2 примера: char* str = &quot;Немыслимый текст&quot;; char* s = new...


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

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

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