Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.05.2016
Сообщений: 11
1

Выделение большой памяти и крах C++)

21.12.2017, 11:11. Показов 645. Ответов 8
Метки нет (Все метки)

Приветствую. Может кто встречался с данным недорозумением.
Требуется выделить прилично памяти что то около 12*218*368 байт ...Выделю память вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   char *modibuff=NULL;
 
   //  info.length = 12*218*368
 
   // выделаем память
   modibuff=(char*) VirtualAlloc (NULL,info.length,MEM_COMMIT,PAGE_READWRITE);
   if (modibuff==NULL)
      {
        ShowMessage("Error VirtualAlloc");
        return ;
      }
 
   // освобождаем
   if ( VirtualFree(modibuff,info.length,MEM_RELEASE ) )
      {
        ShowMessage("Error free VirtualFree");
        return ;
      }
т.е. в качестве примера я выделю и тут освобождаю...после этого перестет работать вывод в Canvas -выходит сообщение


... raised exception class EOufOfRecources with message 'Отказано в доступе'



при выделении меньшего объема памяти ,все работает нормально ...т.е. выбрал память и тут же освободил но уже дальше все равно не работает/
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2017, 11:11
Ответы с готовыми решениями:

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

Выделение памяти
MyClass& DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы к переменной можно...

Выделение памяти
Пишу программу в C++ Borland Builder 6. Если пытаюсь выделить сколь угодно много памяти с помощью...

Динамическое выделение памяти
В одном источнике прочитал следующее Т.е. блок выделяемой памяти должен быть кратен параграфу?...

8
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
21.12.2017, 11:28 2
Посмотрите на свою переменную info.length в отладке в момент выделения, и в момент высвобождения, думаю они не совпадают, кароче за пределы вы леете выделенной памяти, тока что проверил у меня все работает
0
0 / 0 / 0
Регистрация: 20.05.2016
Сообщений: 11
21.12.2017, 11:30  [ТС] 3
Одинаковые.
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
21.12.2017, 11:33 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   modibuff=(char*) VirtualAlloc (NULL,100000000,MEM_COMMIT,PAGE_READWRITE);
   if (modibuff==NULL)
      {
        ShowMessage("Error VirtualAlloc");
        return ;
      }
 
   // освобождаем
   if ( VirtualFree(modibuff,100000000,MEM_RELEASE ) )
      {
        ShowMessage("Error free VirtualFree");
        return ;
      }
Проверил у себя так, все работает
0
0 / 0 / 0
Регистрация: 20.05.2016
Сообщений: 11
21.12.2017, 11:34  [ТС] 5
Все верно оно работает . Дальше перестает работать. У меня дальше идет вывод графики и вот она и дает сообщения.
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
21.12.2017, 11:36 6
а к чему этот код имеет отношение?
0
0 / 0 / 0
Регистрация: 20.05.2016
Сообщений: 11
21.12.2017, 11:42  [ТС] 7
У меня выделяемся массив (modibuff) и с него рисуется график , затем массив отчищается ...

Добавлено через 1 минуту
Кстати простой тест прошел ...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   char *modibuff=NULL;
   modibuff=(char*) VirtualAlloc (NULL,100000000,MEM_COMMIT,PAGE_READWRITE);
   if (modibuff==NULL)
      {
        ShowMessage("Error VirtualAlloc");
        return ;
      }
 
   if ( VirtualFree(modibuff,100000000,MEM_RELEASE   ) )
      {
        ShowMessage("Error free VirtualFree");
        ShowMessage(GetLastError());
        return ;
      }
 
 
    box->Canvas->MoveTo(0,0);
    box->Canvas->LineTo(0,box->Height);
Добавлено через 20 секунд
щас посмотрю может что то еще мешает,...

Добавлено через 2 минуты
Все нашел ...
У меня в графику шел

box->Width=10000000000

поэтому и ругалось...

AlexSt Спасибо. Навел на мысль)
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
21.12.2017, 11:46 8
нез
0
0 / 0 / 0
Регистрация: 20.05.2016
Сообщений: 11
21.12.2017, 11:47  [ТС] 9
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2017, 11:47

Выделение динамической памяти
Задан граф в виде матрицы смежности вершин. Найти число компонент связности в этом графе....

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

Динамическое выделение памяти под строку
Проблема в том, что при выделении памяти под строку temp->data.other, происходит изменение...

Std:: vector<Structure>, выделение памяти
Уважаемые, программисты, помогите новичку исправить ошибку, при создании вектора структур. ...


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

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

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