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

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

17.12.2015, 16:42. Показов 5691. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru