Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/43: Рейтинг темы: голосов - 43, средняя оценка - 4.67
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54

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

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

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и "Дополнительные сведения см. в разделе "Инструкции по отладке в случае переполнения буфера"". Как справиться с сией проблемой? Что нужно изменять в коде программы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2013, 00:46
Ответы с готовыми решениями:

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

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

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

26
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
13.05.2013, 00:49
без кода ничего никто не скажет. какой буфер, где и при каких условиях.
в таких случаях кэп советует
см. в разделе "Инструкции по отладке в случае переполнения буфера""
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 01:09  [ТС]
Вот код программы:
Заголовочный файл класса
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
#pragma once
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include "bmp_structs.h"
using namespace std;
 
class BMP
{
public:
    BitMapHeader bh;
    BitMapInfoHeader bih;
    RGBQUAD RGBQuad[256];
    BMP();
    void ReadQuad(RGBQUAD* RGB, int biSize, char* filename);
    void France_flag(char* filename);
 
    BMP read_BMP_info(char* filename);
    
    
    friend struct BitMapHeader;
    friend struct BitMapInfoHeader;
    friend struct RGBQUAD;
    ~BMP();
    
    
};
Файл описания методов

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "StdAfx.h"
#include "BMP.h"
 
 
BMP::BMP()
{
}
 
 
void BMP::ReadQuad(tagRGBQUAD* RGB, int biSize, char* filename)
{
    fstream f(filename, ios::binary | ios::out | ios::in | ios::ate);
    f.seekg(biSize, SEEK_SET);
    f.read((char*)& RGB, 1024);
    f.close();
}
BMP BMP::read_BMP_info(char* filename)
{
    BMP h;
    fstream f(filename,ios::binary | ios::out | ios::in | ios::ate);
    f.seekg(0, ios::beg);
    f.read((char*)& h.bh,sizeof(bh));
    f.read((char*)& h.bih,sizeof(bih));
    h.ReadQuad(RGBQuad, h.bih.biSize + 14, filename);
    f.close();
    return h;
}
void BMP::France_flag(char* filename)
{
    BMP h;
    fstream f(filename, ios::binary | ios::out | ios::in | ios::ate);
    h.read_BMP_info(filename);
    f.seekg(h.bh.bfOffbits + 14, ios::beg);
    int n = h.bih.biHeight / 3;
    int m = h.bih.biWidth;
    tagRGBQUAD* part1 = new tagRGBQUAD [n * m] ;
    tagRGBQUAD* part2 = new tagRGBQUAD [n * m];
    tagRGBQUAD* part3 = new tagRGBQUAD [n * m];
    for(int i = 0; i < n * m; i ++)
    {
        part1[i].rgbBlue = 255;
        part2[i].rgbBlue = 255;
        part3[i].rgbBlue = 0;
        part1[i].rgbGreen = 255;
        part2[i].rgbGreen = 0;
        part3[i].rgbGreen = 0;
        part1[i].rgbRed = 255;
        part2[i].rgbRed = 0;
        part1[i].rgbRed = 255;
    }
    f.seekg(h.bh.bfOffbits + 14, ios::beg);
    f.write((char*)& part1, sizeof(part1));
    f.write((char*)& part2, sizeof(part2));
    f.write((char*)& part3, sizeof(part3));
    f.close();
    
    
}
BMP::~BMP()
{
}
И файл описания структур для BMP файлов:
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
28
29
30
31
32
33
34
35
36
37
38
typedef unsigned short int word; 
typedef unsigned int dword;
#pragma pack(push)
#pragma pack(1)
 
struct BitMapHeader
{
word bfType; 
dword bfSize; 
word bfReserved1;  
word bfReserved2;  
dword bfOffbits; 
};
 
struct BitMapInfoHeader
{
dword biSize ; 
dword biWidth;
dword biHeight; 
word biPlanes;
word biBitCount;  
dword biCompression; 
dword biSizeImage; 
dword biXPelPerMeter; 
dword biYPelPerMeter;  
dword biClrUsed;  
dword biClrImportant;
};
typedef unsigned char BYTE;
 
#pragma pack(pop)
 
struct RGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
};
Это класс для работы с BMP файлами и методом для рисования французского флага

Добавлено через 2 минуты
И выделенный момент с ошибкой:

"8-bit_BMP.exe": Загружено: "D:\Vs\8-bit_BMP\Debug\8-bit_BMP.exe", Символы загружены.
"8-bit_BMP.exe": Загружено: "C:\Windows\System32\ntdll.dll", Невозможно найти или открыть файл PDB
"8-bit_BMP.exe": Загружено: "C:\Program Files\AVAST Software\Avast\snxhk.dll", Невозможно найти или открыть файл PDB
"8-bit_BMP.exe": Загружено: "C:\Windows\System32\kernel32.dll", Невозможно найти или открыть файл PDB
"8-bit_BMP.exe": Загружено: "C:\Windows\System32\KernelBase.dll" , Невозможно найти или открыть файл PDB
"8-bit_BMP.exe": Загружено: "C:\Windows\System32\msvcp100d.dll", Символы загружены.
"8-bit_BMP.exe": Загружено: "C:\Windows\System32\msvcr100d.dll", Символы загружены.
Первый этап обработки исключения в "0x00af5286" в "8-bit_BMP.exe": 0xC0000005: Нарушение прав доступа при чтении "0x999999a5".
В 8-bit_BMP.exe возникло переполнение буфера, что привело к повреждению внутреннего состояния программы. Нажмите кнопку "Прервать", чтобы отладить программу, или кнопку "Продолжить", чтобы завершить программу.

Дополнительные сведения см. в разделе "Инструкции по отладке в случае переполнения буфера".
В 8-bit_BMP.exe возникло переполнение буфера, что привело к повреждению внутреннего состояния программы. Нажмите кнопку "Прервать", чтобы отладить программу, или кнопку "Продолжить", чтобы завершить программу.

Дополнительные сведения см. в разделе "Инструкции по отладке в случае переполнения буфера".

STATUS_STACK_BUFFER_OVERRUN encountered
8-bit_BMP.exe привело в действие точку остановка
Программа "[7212] 8-bit_BMP.exe: Машинный код" завершилась с кодом -1073740791 (0xc0000409).
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
13.05.2013, 01:22
осваивайте отладку программ.
в студии с этим все просто.
беглый взгляд падает на строку 14:
f.read((char*)& RGB, 1024);

возможно хотелось так:
f.read((char*)RGB, 1024);
1
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 01:29  [ТС]
Исправление этого момента помогло..Немного. Теперь буфер не переполняется, но все равно программа падает
Миниатюры
Переполнение буфера  
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 01:30  [ТС]
Как я понимаю, ему не нравится размер, вот только размер чего? И почему не нравится?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.05.2013, 08:19
Цитата Сообщение от Eagle123 Посмотреть сообщение
Как я понимаю, ему не нравится размер, вот только размер чего? И почему не нравится?
Судя по ошибке на картинке имеется попытка выделения памяти, задав отрицательное число, которое в итоге интерпретируется как слишком большое положительное.
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 08:24  [ТС]
C++
1
2
3
4
5
 int n = h.bih.biHeight / 3;
    int m = h.bih.biWidth;
    tagRGBQUAD* part1 = new tagRGBQUAD [n * m] ;
    tagRGBQUAD* part2 = new tagRGBQUAD [n * m];
    tagRGBQUAD* part3 = new tagRGBQUAD [n * m];
НАверное это в этом моменте?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
13.05.2013, 08:36
Eagle123,
вот на этой картинке что ты привел
нажми продолжить
программа упадет еще раз
тогда нажми прервать
и попадешь в отладчик на точку что вызвала исключение
скорее всего попадешь в какую нибудь системную функцию
тогда идешь в отладчике в окошка стека
там будет список функций которые вызваны до аварии
просмотри их сверху вниз и тогда дойдешь до строки с неправильными параметрами
1
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 14:40  [ТС]
Цитата Сообщение от Eagle123 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
BMP BMP::read_BMP_info(char* filename)
{
* * BMP h;
* * fstream f(filename,ios::binary | ios::out | ios::in | ios::ate);
* * f.seekg(0, ios::beg);
* * f.read((char*)& h.bh,sizeof(bh));
* * f.read((char*)& h.bih,sizeof(bih));
* * h.ReadQuad(RGBQuad, h.bih.biSize + 14, filename);
* * f.close();
* * return h;
}
Разобрался. Надо было переделать немного эту функцию
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.05.2013, 14:46
Цитата Сообщение от Eagle123 Посмотреть сообщение
Надо было переделать немного эту функцию
Что в итоге?
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 18:46  [ТС]
В итоге считывается информация из файла правильно, и массив создается тоже верно.
И все бы хорошо, только рисует не флаг, а вот это.
Миниатюры
Переполнение буфера  
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 18:47  [ТС]
Вот функция, которая это рисует. Что-то тут не так
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
28
29
30
void BMP::France_flag(char* filename)
{
    BMP h;
    fstream f(filename, ios::binary | ios::out | ios::in);
    h.read_BMP_info(filename);
    
    
    unsigned int n = h.bih.biHeight;
    unsigned int m = h.bih.biWidth;
    
    BYTE* Str = new BYTE [m];
    for(int i = 0; i < m / 3; i ++)
        Str[i] = 0xCC;
    for(int i = m / 3; i < 2 * (m / 3); i ++)
        Str[i] = 0xFF;
    for(int i = 2 * (m / 3); i < m; i ++)
        Str[i] = 0x99;
 
    f.seekg(h.bh.bfOffbits, ios::beg);
    int counter = 0;
    while(counter != h.bih.biHeight)
    {
        f.write((char*)Str, h.bih.biWidth);
        counter ++;
    }
    
    f.close();
    
    
}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
13.05.2013, 19:12
Eagle123,
А ты откуда берешь размеры
Из заголовка файла?
а ты учел что там два размера размер картинки и размер буфера выравненный то ли на 2 то ли на 4 (нет сейчас спецификации под рукой) и они могут различаться
и учти что в BMP шке картинка размещена вверх ногами
т.е самая нижняя строчка в буфере самая первая

Добавлено через 1 минуту
Да и с палирой разберись ты видать её не загружаешь
у французского флага никак не такие цвета
1
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:22  [ТС]
С цветами все нормально. Там если увеличить, то видны нужные полосы (синего, белого и красного цветов). Только на картинке они накладываются друг на друга... Получается, если запись идет с конца, то надо делать не сине-бело-красный, а красно-бело-синий флаг?? А вот с размерами теперь не ясно, там же в структуре заголовка только одна длина и ширина?

Еще нашел, что надо учитывать кол-во байтов на пиксель..Это так?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
13.05.2013, 19:36
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
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:40  [ТС]
Размер изображения в байтах = 226000, размер в пикселях т.е. h.bih.biHeight * h.bih.biWidth = 900 * 500 = 450000. И по каким размерами тогда составлять массив для цветов и записывать его, по байтам??

Добавлено через 2 минуты
Изображение 16-ти цветное
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:47  [ТС]
Изменил началиный размер изображения ( сделал размеры сторон кратные 4), получилось вот так
Миниатюры
Переполнение буфера  
0
6 / 6 / 2
Регистрация: 03.10.2012
Сообщений: 54
13.05.2013, 19:51  [ТС]
Но сразу заметно, что изображение закрашено не полностью, видны какие-то полосы. Поэтому цвета так смешиваются
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
13.05.2013, 20:49
Цитата Сообщение от Eagle123 Посмотреть сообщение
Изображение 16-ти цветное
сделай сначала полноцветное изображение (32 бита на пиксел) разберись с ним
или поройся в сети найди готовые библиотеки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2013, 20:49
Помогаю со студенческими работами здесь

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

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

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

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

Переполнение буфера при вводе
Есть код char arr; cin &gt;&gt; arr; Он работает, но не очень понятно как, и судя по всему имеет проблемы. Помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru