Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42

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

17.12.2015, 16:42. Показов 5644. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе имеется форма и записывается текстовые файлы. Когда она запускается всё работает нормально, ProgressBar доходит до определённого момента (не до конца), а потом форма резко закрывается и текстовые файлы остаются недописанными. Самое интересное, что никакой ошибки не вылетает, а в консоли пишется следующее:
XML
1
2
3
4
5
6
7
8
9
STATUS_STACK_BUFFER_OVERRUN encountered
Поток 'Поток Win32' (0x13a64) завершился с кодом -1073740791 (0xc0000409).
Поток 'Поток Win32' (0x13a38) завершился с кодом -1073740791 (0xc0000409).
Поток 'Поток Win32' (0x13a9c) завершился с кодом -1073740791 (0xc0000409).
Поток 'Поток Win32' (0x13a70) завершился с кодом -1073740791 (0xc0000409).
Поток 'Поток Win32' (0x13a50) завершился с кодом -1073740791 (0xc0000409).
Поток 'Поток Win32' (0x13a90) завершился с кодом -1073740791 (0xc0000409).
Программа "[80436] Проект1.exe: Управляемый код (v4.0.30319)" завершилась с кодом -1073740791 (0xc0000409).
Программа "[80436] Проект1.exe: Машинный код" завершилась с кодом -1073740791 (0xc0000409).
Что это значит и как с этим бороться?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2015, 16:42
Ответы с готовыми решениями:

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

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

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

13
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.12.2015, 16:51
Аннна, без кода трудно сказать.
0
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42
17.12.2015, 17:03  [ТС]
Код слишком большой, но я думаю что дело не в нём (т.к. никаких ошибок не вылетает). Вот часть которая записывает файлы в цикле:

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
// Открываем файл, в который будут записываться наши данные:
    int count = Project1::PointFiless::count;
    array<PointFile^>^PointFiles = gcnew array<PointFile^>(count);
    for (int i = 0; i < count; i++) {
        PointFiles[i] = gcnew PointFile(Points[i],Coords,K,SpDel,this->Radius_X,this->Radius_Y,this->Radius_Z, this->FormOf_Resonator, Points[12]);
    }
    
    //fprintf(file, "Time Ex Ey Ez Hx Hy Hz");
    
    // Определяем количество ядер процессора:
    int CountProc;
    if (this->Threads->Value == 0) {
        SYSTEM_INFO sysinfo;
        GetSystemInfo(&sysinfo);
         CountProc = sysinfo.dwNumberOfProcessors;
    }
    else {
         CountProc = Convert::ToInt16(this->Threads->Value);
    }
    //---------------------------------------------------------------------
        int BarDel = (Cn_Z + 1)*(Cn_Y + 1) + Cn_Z + 2;
        int VolumeDel = (K-2*BarDel) / CountProc;
        array<CThreadE^>^thE = gcnew array<CThreadE^>(CountProc);
        array<CThreadH^>^thH = gcnew array<CThreadH^>(CountProc);
        for (int i = 0; i < CountProc; i++) {
            thE[i] = gcnew CThreadE(BarDel + VolumeDel*i, BarDel + VolumeDel + VolumeDel*i, ComponentsE,ComponentsH, Cn_Z, Cn_Y, SpDel, TimeDel, PointJ);
            thH[i] = gcnew CThreadH(BarDel + VolumeDel*i, BarDel + VolumeDel + VolumeDel*i, ComponentsE, ComponentsH, Cn_Z, Cn_Y, SpDel, TimeDel);
        }
            //  Запускаем цикл по времени:
    while (T <T1) {
        // Запускаем цикл по пространству:
        for (int i = 0; i < CountProc; i++) {thH[i]->Start(T);  }
 
        for (int i = 0; i < CountProc; i++) { while (thH[i]->life) {} }
 
        for (int i = 0; i < CountProc; i++) {thE[i]->Start(T);  }
 
        for (int i = 0; i < CountProc; i++) { while (thE[i]->life) {} }
                    
        for (int i = 0; i < count; i++) {PointFiles[i]->WriteFile(\
            T*TimeDel,ComponentsE[Points[i]][0], ComponentsE[Points[i]][1], ComponentsE[Points[i]][2],\
        ComponentsH[Points[i]][0], ComponentsH[Points[i]][1], ComponentsE[Points[i]][2], PointJ[T]);
                    }
        this->progressBar2->Value++;
        T ++;
    }
    
 
    this->progressBar2->Value = 0;
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
17.12.2015, 18:01
Проверяйте: соответствуют ли индексы размерам массивов.
1
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42
17.12.2015, 18:28  [ТС]
Индексы соответствуют, я проверяла несколько раз. Это скорее "ошибка" времени выполнения, т.к. программа останавливается каждый раз в разных местах (при одинаковых параметрах) и тупо "выключается" раньше времени. Иногда она успевает записать часть файла, иногда - просто создаёт пустой.

Вот класс, который записывает в файл (на всякий случай):
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
 public ref class PointFile {
         
         String^ file_name;
         StreamWriter^ sw;
     public:
         PointFile(int Point, double **Coords, int K, double SpDel, double Radius_X, double Radius_Y, double Radius_Z, String^Forma,int CurrentPoint)
         {
            
             this->file_name = Forma + " " + Convert::ToString(Coords[Point][0] + "_" + Coords[Point][1] + "_" + Coords[Point][2]+".txt");
             sw = gcnew StreamWriter(file_name);
             sw->WriteLine("Forma of Resonator: " + Forma);
             sw->WriteLine("Coords of the point:  " + Convert::ToString(Coords[Point][0] + " " + Coords[Point][1] + " " + Coords[Point][2]));
             sw->WriteLine("Current point: "+Convert::ToString(Coords[CurrentPoint][0] + " " + Coords[CurrentPoint][1] + " " + Coords[CurrentPoint][2]));
             sw->WriteLine("Accuracy: " + SpDel + "\n" + "Radius_X: " + Radius_X + " Radius_Y: " + Radius_Y + " Radius_Z: " + Radius_Z);
             sw->WriteLine("Number of nodes: " + K);
        
        }
         void WriteFile(double T, double Ex, double Ey, double Ez, double Hx, double Hy, double Hz, double Jx)
         {
             sw->WriteLine(T + " " + Ex + " " + Ey + " " + Ez + " " + Hx + " " + Hy + " " + Hz + " " + Jx);
             
         }
     private:
         ~PointFile() { 
             sw->Flush();
             sw->Close(); 
         }
 
         
     };
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
17.12.2015, 19:14
Цитата Сообщение от Аннна Посмотреть сообщение
Индексы соответствуют, я проверяла несколько раз. Это скорее "ошибка" времени выполнения, т.к.
Понятно, что времени выполнения. Выход за границу выделенной памяти как раз и относится к таким ошибкам.

Добавлено через 22 минуты
Память под массивы где выделялась?
0
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42
17.12.2015, 21:46  [ТС]
Цитата Сообщение от nord_v Посмотреть сообщение
Память под массивы где выделялась?
Здесь:
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
    for (int p = 0; p < K; p++) {
                ComponentsE[p] = new double[12];
                ComponentsH[p] = new double[6];
                Coords[p] = new double[3];
            }
            Components_Cylinder(TimeDel, Bar_X, Bar_Y, Bar_Z, K, Cn_X, Cn_Y, Cn_Z, ComponentsE,ComponentsH,Coords);
 
            Points(Point, SpDel, Bar_X, Bar_Y, Bar_Z, K, Radius_X, Radius_Z, Radius_Y, PointForm->PointNumber);
 
            if (this->checkBox1->Checked)
            {
 
                switch (NonForm->Index_NonUn) {
                case 0:
                    NonUniformInRes_Sphere(Cn_X, Cn_Y, Cn_Z, Bar_X, Bar_Y, Bar_Z, SpDel, NonForm->CoordX_NonUn, NonForm->CoordY_NonUn, NonForm->CoordZ_NonUn, \
                        NonForm->RadiusX_NonUn, NonForm->RadiusY_NonUn, NonForm->RadiusZ_NonUn, \
                        NonForm->epsX_NonUn, NonForm->epsY_NonUn, NonForm->epsZ_NonUn, \
                        NonForm->muX_NonUn, NonForm->muY_NonUn, NonForm->muZ_NonUn, \
                        NonForm->sigmaX_NonUn, NonForm->sigmaY_NonUn, NonForm->sigmaZ_NonUn, \
                        NonForm->Index_NonUn, ComponentsE, ComponentsH);
                    break;
                case 1:
                    NonUniformInRes_Rect(Cn_X, Cn_Y, Cn_Z, Bar_X, Bar_Y, Bar_Z, SpDel, NonForm->CoordX_NonUn, NonForm->CoordY_NonUn, NonForm->CoordZ_NonUn, \
                        NonForm->RadiusX_NonUn, NonForm->RadiusY_NonUn, NonForm->RadiusZ_NonUn, \
                        NonForm->epsX_NonUn, NonForm->epsY_NonUn, NonForm->epsZ_NonUn, \
                        NonForm->muX_NonUn, NonForm->muY_NonUn, NonForm->muZ_NonUn, \
                        NonForm->sigmaX_NonUn, NonForm->sigmaY_NonUn, NonForm->sigmaZ_NonUn, \
                        NonForm->Index_NonUn, ComponentsE, ComponentsH);
                    break;
                case 2:
                    NonUniformInRes_Cylinder(Cn_X, Cn_Y, Cn_Z, Bar_X, Bar_Y, Bar_Z, SpDel, NonForm->CoordX_NonUn, NonForm->CoordY_NonUn, NonForm->CoordZ_NonUn, \
                        NonForm->RadiusX_NonUn, NonForm->RadiusY_NonUn, NonForm->RadiusZ_NonUn, \
                        NonForm->epsX_NonUn, NonForm->epsY_NonUn, NonForm->epsZ_NonUn, \
                        NonForm->muX_NonUn, NonForm->muY_NonUn, NonForm->muZ_NonUn, \
                        NonForm->sigmaX_NonUn, NonForm->sigmaY_NonUn, NonForm->sigmaZ_NonUn, \
                        NonForm->Index_NonUn, ComponentsE, ComponentsH);
                    break;
                default: break;
                }
            }
            GoM(ComponentsE,ComponentsH,Coords, Point, K, Cn_X, Cn_Y, Cn_Z, TimeDel, SpDel, T1, C);
В 3-м посте отрывок из ф-ции GoM.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
17.12.2015, 22:33
Под ComponentsE, ComponentsH, Coords память где выделялась? Под PointJ?

Добавлено через 27 минут
Без полного кода тут маловероятно разобраться в причинах ошибки. Выкладывайте весь проект.
0
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42
18.12.2015, 00:17  [ТС]
Загрузила всё что влезло.
Вложения
Тип файла: rar Resonator_Program_0.rar (979.2 Кб, 6 просмотров)
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 02:17
Цитата Сообщение от Аннна Посмотреть сообщение
Загрузила всё что влезло
То что влезло, будет ошибку выдавать?

Добавлено через 1 минуту
Студия какая?

Добавлено через 1 час 19 минут
У меня проект не собирается, поэтому помочь не смогу.

Добавлено через 24 минуты
С таким кодом лучше здесь разбираться: https://www.cyberforum.ru/cpp-cli-winforms/
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
18.12.2015, 02:19
Цитата Сообщение от Аннна Посмотреть сообщение
никакой ошибки не вылетает, а в консоли пишется следующее
В консоли и пишется что за ошибка выскочила "STATUS_STACK_BUFFER_OVERRUN".
Что-то где-то не туда пишите? Переполнение стека? Может еще какая-нибудь фигня.
Проект я как-то собрал, но разбираться в этой куче окошек - ну его нафиг.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 02:36
Проект собрал в 15-й студии. Какие данные там нужно задать, перед тем, как нажать Go?
0
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 42
18.12.2015, 13:45  [ТС]
Цитата Сообщение от nord_v Посмотреть сообщение
Проект собрал в 15-й студии. Какие данные там нужно задать, перед тем, как нажать Go?
В выпадающем списке(левый верхний угол) нужно выбрать цилиндр. В окне "Number of time steps" набрать "100", в форме "PointFiles" в окне "Amount of the points" нужно выбрать 1, дальше нажать 2 кнопки "Set" (над кнопками в формах можно задать координаты точек, но они должны быть меньше, чем координаты на форме) и кнопку "End". Ошибка, скорее всего связана с формой "PointFiless"или с классом "PointFile" (описан в конце "MyForm.h")также в функции "GoM" Создаётся массив классов "PointFile". До того как я всё это добавила, всё работало нормально без ошибок.

Добавлено через 3 часа 6 минут
Ошибки я нашла, спасибо всем за советы. В одном месте и правда был выход за границы массива (если интересно - напишу подробнее). Также для класса StrimWriter
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     StreamWriter^ sw;
     public:
         PointFile(int Point, double **Coords, int K, double SpDel, double Radius_X, double Radius_Y, double Radius_Z, String^Forma,int CurrentPoint)
         {
            
             this->file_name = Forma + " " + Convert::ToString(Coords[Point][0] + "_" + Coords[Point][1] + "_" + Coords[Point][2]+".txt");
             sw = gcnew StreamWriter(file_name);
             sw->WriteLine("Forma of Resonator: " + Forma);
             sw->WriteLine("Coords of the point:  " + Convert::ToString(Coords[Point][0] + " " + Coords[Point][1] + " " + Coords[Point][2]));
             sw->WriteLine("Current point: "+Convert::ToString(Coords[CurrentPoint][0] + " " + Coords[CurrentPoint][1] + " " + Coords[CurrentPoint][2]));
             sw->WriteLine("Accuracy: " + SpDel + "\n" + "Radius_X: " + Radius_X + " Radius_Y: " + Radius_Y + " Radius_Z: " + Radius_Z);
             sw->WriteLine("Number of nodes: " + K);
             sw->AutoFlush=true;
        
        }
нужно было установить параметр AutoFlush=true.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 14:25
Есть ещё ошибка. До неё может и не доходит, но исправить всё равно нужно. В файле MyForm.h, в строке 1352, делается:
C++
1
delete [] Point;
, хотя, в строке 1108, этот массив создаётся статически:
C++
1
int Point[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2015, 14:25
Помогаю со студенческими работами здесь

Переполнение буфера
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
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
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru