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

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

Войти
Регистрация
Восстановить пароль
 
J10
4 / 4 / 0
Регистрация: 30.04.2011
Сообщений: 50
#1

Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] - C++

30.04.2011, 14:26. Просмотров 764. Ответов 4
Метки нет (Все метки)

Задан массив из 3 указателей Bitmap, по адресу Bitmap[1] необходимо записать 480*640 элементов из массива Bitmap[0]. В последнем цикле for выдает ошибку при i=2:

Необработанное исключение в "0x004139be" в "Blue.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int i=0;
 
BYTE* Bitmap[3];
 
//Выделяем память
for (i=0; i<=2; Bitmap[i++]=(BYTE *)malloc(480*640*sizeof(BYTE)));
//Заполняем нулями
for (i=0; i<=2; memset(Bitmap[i++],'0', 480*640*sizeof(BYTE)));
 
if (hFile != HFILE_ERROR)
 {
  //Считываем из файла массив 480*640*3 и забиваем его в память по адресам Bitmap
  for (i=0; i<=2; _lread(hFile, Bitmap[i++], 480*640*sizeof(BYTE)));
  //Необходимо перезаписать элементы, начиная с адреса Bitmap[1]
  for (i=0; i<=(480*640-1)*sizeof(BYTE); *(Bitmap+i)[1]=*(Bitmap+i)[0], i+=sizeof(BYTE));
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2011, 14:26     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0]
Посмотрите здесь:
C++ Происхродит ли здесь возврат указателя на не действительную память?
C++ Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
C++ Каким образом выделяется память при инициализации строковой константой указателя
Bitmap reader C++
C++ Работа с BITMAP
C++ Загрузка bitmap файла
Формирование 8-bit bitmap C++
Деструктор Gdiplus::bitmap C++
передача указателя C++
C++ Передача указателя
Удаление указателя C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.04.2011, 16:05     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] #2
В конструкции for должны располагаться только команды управления циклом. То, что язык позволяет написать ТАКОЕ, как в приведённом коде, не означает, что так нужно делать. Этот код не поддаётся трассировке и отладке. Поэтому я не буду говорить где в нём ошибка, пока нормально циклы не напишите.
J10
4 / 4 / 0
Регистрация: 30.04.2011
Сообщений: 50
30.04.2011, 18:24  [ТС]     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] #3
Отредактировал код. Как я понимаю он при i=0 записывает элемент, находящийся по адресу Bitmap[0] в ячейку, находящийся по адресу Bitmap[1], а вот при i=1 происходит какая то непонятная ситуация - он начинает запись элемента с адреса Bitmap[1] в ячейку Bitmap[2].

Почему? *(Bitmap+i)[...] разве ведет не на следующий элемент указателя Bitmap[...]?

Что то я запутался... o.O

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
 int i=0;
 
 BYTE* Bitmap[3];
 
 //Выделяем память
 for (i=0; i<=2; i++)
 {
     Bitmap[i]=(BYTE *)malloc(480*640*sizeof(BYTE));
 }
 //Заполняем нулями
 for (i=0; i<=2; i++)
 {
     memset(Bitmap[i],'0', 480*640*sizeof(BYTE));
 }
  if (hFile != HFILE_ERROR)
 {
  //Считываем из файла массив 480*640*3 и забиваем его в память по адресам Bitmap
  for (i=0; i<=2; i++)
  {
      _lread(hFile, Bitmap[i], 480*640*sizeof(BYTE));
  }
  //Необходимо перезаписать элементы, начиная с адреса Bitmap[1]
  for (i=0; i<=(480*640-1)*sizeof(BYTE); i+=sizeof(BYTE))
  {
      *(Bitmap+i)[1]=*(Bitmap+i)[0];
  }
 }
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.04.2011, 19:06     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] #4
Молодец.
Вместо "i+=sizeof(BYTE)" достаточно i++
Вместо "*(Bitmap+i)[1]=*(Bitmap+i)[0];" "Bitmap[1][i] = Bitmap[0][i];"
J10
4 / 4 / 0
Регистрация: 30.04.2011
Сообщений: 50
30.04.2011, 22:07  [ТС]     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] #5
Спасиб
Yandex
Объявления
30.04.2011, 22:07     Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0]
Ответ Создать тему
Опции темы

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