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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
#1

Переполнение буфера - C++

13.05.2013, 00:46. Просмотров 2853. Ответов 26
Метки нет (Все метки)

Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и "Дополнительные сведения см. в разделе "Инструкции по отладке в случае переполнения буфера"". Как справиться с сией проблемой? Что нужно изменять в коде программы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 00:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переполнение буфера (C++):

переполнение буфера - C++
Что такое переполнение буфера?

Переполнение буфера - C++
Объясните почему вылетает ошибка и помогите исправить. Зарание спасибо возникло переполнение буфера, что привело к повреждению...

Переполнение буфера - C++
Добрый день! В общем: #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv) { ...

Переполнение буфера - C++
В программе имеется форма и записывается текстовые файлы. Когда она запускается всё работает нормально, ProgressBar доходит до...

Переполнение буфера - C++
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include...

Переполнение буфера! (наверное) - C++
Идет открытие порта звуковой карты, получение битов, запись битов в буфер и дальнейшие манипуляции с ним (пока только вывод в текстовый...

26
ValeryS
Модератор
6787 / 5195 / 498
Регистрация: 14.02.2011
Сообщений: 17,438
13.05.2013, 19:36 #16
http://www.firststeps.ru/mfc/msdn/r.php?114
Вот это
22h 4 biSizeIm Размер изображения в байтах
и это
12h 4 biWidth Ширина Bitmap-а в пикселях
16h 4 biHeight Высота Bitmap-а в пикселях

Добавлено через 3 минуты
Цитата Сообщение от Eagle123 Посмотреть сообщение
Еще нашел, что надо учитывать кол-во байтов на пиксель..Это так?
ну очень просто если у тебя 24 битное изображение
то считываешь
1 байт красный
2 байт зеленый
3 байт синий
4 зарезервирован
т.е на одну точку считывать нужно 4 байта
если 256 цветов то на одну точку 1 байт
а если двухцветное изображение то один байт на 8 точек

Добавлено через 44 секунды
вот еще http://c-site.h1.ru/infa/bmp_struct.htm
сноску почитай
1
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:40  [ТС] #17
Размер изображения в байтах = 226000, размер в пикселях т.е. h.bih.biHeight * h.bih.biWidth = 900 * 500 = 450000. И по каким размерами тогда составлять массив для цветов и записывать его, по байтам??

Добавлено через 2 минуты
Изображение 16-ти цветное
0
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:47  [ТС] #18
Изменил началиный размер изображения ( сделал размеры сторон кратные 4), получилось вот так
0
Миниатюры
Переполнение буфера  
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:51  [ТС] #19
Но сразу заметно, что изображение закрашено не полностью, видны какие-то полосы. Поэтому цвета так смешиваются
0
ValeryS
Модератор
6787 / 5195 / 498
Регистрация: 14.02.2011
Сообщений: 17,438
13.05.2013, 20:49 #20
Цитата Сообщение от Eagle123 Посмотреть сообщение
Изображение 16-ти цветное
сделай сначала полноцветное изображение (32 бита на пиксел) разберись с ним
или поройся в сети найди готовые библиотеки
0
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 20:56  [ТС] #21
Вот в том то и дело, что нельзя библиотеки использовать сторонние. Надо свой класс создать. Задание вот такое=)
0
ValeryS
Модератор
6787 / 5195 / 498
Регистрация: 14.02.2011
Сообщений: 17,438
13.05.2013, 22:22 #22
Цитата Сообщение от Eagle123 Посмотреть сообщение
Вот в том то и дело, что нельзя библиотеки использовать сторонние.
можешь не использовать а только посмотреть
там ничего сложного с точки зрения алгоритма, сложность в приведении
один и тот же байт в зависимости от настройки обозначает разные данные или это цвет или индекс палитра или 4 пиксела
у тебя 16 бит это значит на один пиксель два байта
я сейчас не помню но по моему он так кодируется 16 15 14 13 12 бит синий 11 10 9 8 7 6 зеленый 5 4 3 2 1 красный
это надо в спецификации смотреть
0
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
14.05.2013, 08:29  [ТС] #23
Все сделал, еще одна проьлема заключалась в том, что я использовал 16-цветное изображение, а надо было 256-цветное. Флаг рисует хорошо, все ровно, без мусора. Вот только еще по заданию нужно перегрузить операторы >> и <<, где << - оператор записи в файл, а >> - чтение из файла. Но в классе так много полей..Да и файл двоичный. Как выполнить перегрузку?=)
0
ValeryS
Модератор
6787 / 5195 / 498
Регистрация: 14.02.2011
Сообщений: 17,438
14.05.2013, 09:58 #24
Цитата Сообщение от Eagle123 Посмотреть сообщение
Но в классе так много полей..Да и файл двоичный. Как выполнить перегрузку?=)
у тебя же все реализовано
Цитата Сообщение от Eagle123 Посмотреть сообщение
void BMP::ReadQuad(tagRGBQUAD* RGB, int biSize, char* filename)
..........
BMP BMP::read_BMP_info(char* filename)
может палитру еще надо считывать, создай метод
и создай также методы записи структуры массива
а потом это все объедини
Цитата Сообщение от Eagle123 Посмотреть сообщение
Да и файл двоичный.
ты не поверишь на диске все файлы двоичные
0
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
14.05.2013, 21:07  [ТС] #25
И все таки немного не догоняю, как..
C++
1
2
3
4
istream& operator >>(istream& is, BMP& h)
{
return is>>     //А что вот тут, не пойму
}
0
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.05.2013, 21:53 #26
Цитата Сообщение от Eagle123 Посмотреть сообщение
//А что вот тут, не пойму
Тут должны быть поля BMP, для которых уже определена операция чтения из потока >>.
0
Eagle123
6 / 6 / 0
Регистрация: 03.10.2012
Сообщений: 54
14.05.2013, 22:14  [ТС] #27
Т.е. все поля, которые содержит класс, всю кучу?
А нельзя ли тут как-то применить функцию. которая уже описана в классе. С её помощью мы прочитываем информацию из заголовка:
C++
1
2
3
4
5
6
7
8
9
10
void BMP::read_BMP_info(char* filename)
{
    fstream f(filename, ios::binary | ios::out | ios::in);
    f.seekg(0, ios::beg);
    f.read((char*)& this->bh,sizeof(bh));
    f.read((char*)& this->bih,sizeof(bih));
    this->ReadQuad(RGBQuad, this->bih.biSize + 14, filename);
    f.close();
    
}
Нельзя её применить в перегрузке оператора? Если можно, то как это можно сделать?=)
0
14.05.2013, 22:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2013, 22:14
Привет! Вот еще темы с ответами:

Переполнение буфера . Что делать ? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char in; /* строка...

Не получается сделать переполнение буфера - C++
Всем привет! Нужно сделать переполнение буфера и подменить адрес функции на другой. Если делаю так: void overflow(char *ptr) {...

Переполнение буфера, адрес возврата - C++
Подскажите пожалуйста, где можно найти адрес возврата при переполнении буфера. Visual Studio 2012 windows 8.1

Переполнение буфера и его эксплойты - C++
Добрый вечер) Есть такая прога, которая выглядит следующим образом: #include &lt;cstdio&gt; int checkCredentials() //performs credentials...


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

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

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