1

After rewriting code(Windows forms application) from VS 2005 to VS 2015 "STATUS_STACK_BUFFER_OVERRUN encountered" error occur. In VS2005 program is working fine. I don't really know what is wrong. Code was written in XP OS. Now I'm trying to start it on win7 64-bit VS2015. This program is a example form my programming class. Need to reuse it for other purposes.

#pragma once



namespace Fal_end {
#include <math.h>

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Summary for Form1
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }

    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Label^  label13;
    protected:
    private: System::Windows::Forms::Label^  label12;
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Label^  label11;
    private: System::Windows::Forms::Label^  label10;
    private: System::Windows::Forms::Label^  label9;
    private: System::Windows::Forms::TextBox^  pred_zadana;
    private: System::Windows::Forms::Label^  label8;
    private: System::Windows::Forms::Label^  label7;
    private: System::Windows::Forms::TextBox^  bieguny;
    private: System::Windows::Forms::Label^  label6;
    private: System::Windows::Forms::TextBox^  czestotliwosc;
    private: System::Windows::Forms::Label^  label5;
    private: System::Windows::Forms::TextBox^  predkosc;
    private: System::Windows::Forms::Label^  label4;
    private: System::Windows::Forms::TextBox^  napiecie;
    private: System::Windows::Forms::Label^  label3;
    private: System::Windows::Forms::TextBox^  textBox1;
    private: System::Windows::Forms::Label^  label2;
    private: System::Windows::Forms::Label^  label1;




    private: System::Windows::Forms::Label^  label17;
    private: System::Windows::Forms::Label^  label18;
    private: System::Windows::Forms::TextBox^  okres_amp;

    private: System::Windows::Forms::Label^  label15;
    private: System::Windows::Forms::Label^  label16;
    private: System::Windows::Forms::Label^  label14;


    protected:



















    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->label13 = (gcnew System::Windows::Forms::Label());
            this->label12 = (gcnew System::Windows::Forms::Label());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->label11 = (gcnew System::Windows::Forms::Label());
            this->label10 = (gcnew System::Windows::Forms::Label());
            this->label9 = (gcnew System::Windows::Forms::Label());
            this->pred_zadana = (gcnew System::Windows::Forms::TextBox());
            this->label8 = (gcnew System::Windows::Forms::Label());
            this->label7 = (gcnew System::Windows::Forms::Label());
            this->bieguny = (gcnew System::Windows::Forms::TextBox());
            this->label6 = (gcnew System::Windows::Forms::Label());
            this->czestotliwosc = (gcnew System::Windows::Forms::TextBox());
            this->label5 = (gcnew System::Windows::Forms::Label());
            this->predkosc = (gcnew System::Windows::Forms::TextBox());
            this->label4 = (gcnew System::Windows::Forms::Label());
            this->napiecie = (gcnew System::Windows::Forms::TextBox());
            this->label3 = (gcnew System::Windows::Forms::Label());
            this->textBox1 = (gcnew System::Windows::Forms::TextBox());
            this->label2 = (gcnew System::Windows::Forms::Label());
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->label17 = (gcnew System::Windows::Forms::Label());
            this->label18 = (gcnew System::Windows::Forms::Label());
            this->okres_amp = (gcnew System::Windows::Forms::TextBox());
            this->label15 = (gcnew System::Windows::Forms::Label());
            this->label16 = (gcnew System::Windows::Forms::Label());
            this->label14 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // label13
            // 
            this->label13->AutoSize = true;
            this->label13->Location = System::Drawing::Point(430, 223);
            this->label13->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label13->Name = L"label13";
            this->label13->Size = System::Drawing::Size(49, 20);
            this->label13->TabIndex = 42;
            this->label13->Text = L"..........";
            // 
            // label12
            // 
            this->label12->AutoSize = true;
            this->label12->Location = System::Drawing::Point(430, 185);
            this->label12->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label12->Name = L"label12";
            this->label12->Size = System::Drawing::Size(49, 20);
            this->label12->TabIndex = 41;
            this->label12->Text = L"..........";
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(468, 397);
            this->button1->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(128, 62);
            this->button1->TabIndex = 40;
            this->button1->Text = L"SYMULACJA";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            // 
            // label11
            // 
            this->label11->AutoSize = true;
            this->label11->Location = System::Drawing::Point(268, 223);
            this->label11->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label11->Name = L"label11";
            this->label11->Size = System::Drawing::Size(142, 20);
            this->label11->TabIndex = 39;
            this->label11->Text = L"Czestotliwość [Hz]:";
            // 
            // label10
            // 
            this->label10->AutoSize = true;
            this->label10->Location = System::Drawing::Point(268, 186);
            this->label10->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label10->Name = L"label10";
            this->label10->Size = System::Drawing::Size(97, 20);
            this->label10->TabIndex = 38;
            this->label10->Text = L"Napięcie [V]:";
            // 
            // label9
            // 
            this->label9->AutoSize = true;
            this->label9->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
                static_cast<System::Byte>(238)));
            this->label9->Location = System::Drawing::Point(267, 142);
            this->label9->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label9->Name = L"label9";
            this->label9->Size = System::Drawing::Size(138, 29);
            this->label9->TabIndex = 37;
            this->label9->Text = L"Parametry:";
            this->label9->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
            // 
            // pred_zadana
            // 
            this->pred_zadana->Location = System::Drawing::Point(273, 91);
            this->pred_zadana->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->pred_zadana->Name = L"pred_zadana";
            this->pred_zadana->Size = System::Drawing::Size(148, 26);
            this->pred_zadana->TabIndex = 36;
            this->pred_zadana->Text = L"1000";
            // 
            // label8
            // 
            this->label8->AutoSize = true;
            this->label8->Location = System::Drawing::Point(268, 65);
            this->label8->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label8->Name = L"label8";
            this->label8->Size = System::Drawing::Size(138, 20);
            this->label8->TabIndex = 35;
            this->label8->Text = L"predkość [obr/min]";
            // 
            // label7
            // 
            this->label7->AutoSize = true;
            this->label7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
                static_cast<System::Byte>(238)));
            this->label7->Location = System::Drawing::Point(267, 15);
            this->label7->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label7->Name = L"label7";
            this->label7->Size = System::Drawing::Size(119, 29);
            this->label7->TabIndex = 34;
            this->label7->Text = L"Zadajnik:";
            this->label7->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
            // 
            // bieguny
            // 
            this->bieguny->Location = System::Drawing::Point(21, 378);
            this->bieguny->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->bieguny->Name = L"bieguny";
            this->bieguny->Size = System::Drawing::Size(148, 26);
            this->bieguny->TabIndex = 33;
            this->bieguny->Text = L"2";
            // 
            // label6
            // 
            this->label6->AutoSize = true;
            this->label6->Location = System::Drawing::Point(16, 352);
            this->label6->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label6->Name = L"label6";
            this->label6->Size = System::Drawing::Size(27, 20);
            this->label6->TabIndex = 32;
            this->label6->Text = L"pb";
            // 
            // czestotliwosc
            // 
            this->czestotliwosc->Location = System::Drawing::Point(21, 306);
            this->czestotliwosc->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->czestotliwosc->Name = L"czestotliwosc";
            this->czestotliwosc->Size = System::Drawing::Size(148, 26);
            this->czestotliwosc->TabIndex = 31;
            this->czestotliwosc->Text = L"50";
            // 
            // label5
            // 
            this->label5->AutoSize = true;
            this->label5->Location = System::Drawing::Point(16, 280);
            this->label5->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label5->Name = L"label5";
            this->label5->Size = System::Drawing::Size(54, 20);
            this->label5->TabIndex = 30;
            this->label5->Text = L"fs [Hz]";
            // 
            // predkosc
            // 
            this->predkosc->Location = System::Drawing::Point(21, 232);
            this->predkosc->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->predkosc->Name = L"predkosc";
            this->predkosc->Size = System::Drawing::Size(148, 26);
            this->predkosc->TabIndex = 29;
            this->predkosc->Text = L"1475";
            this->predkosc->TextChanged += gcnew System::EventHandler(this, &Form1::textBox1_TextChanged);
            // 
            // label4
            // 
            this->label4->AutoSize = true;
            this->label4->Location = System::Drawing::Point(16, 206);
            this->label4->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label4->Name = L"label4";
            this->label4->Size = System::Drawing::Size(82, 20);
            this->label4->TabIndex = 28;
            this->label4->Text = L"n [obr/min]";
            // 
            // napiecie
            // 
            this->napiecie->Location = System::Drawing::Point(21, 162);
            this->napiecie->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->napiecie->Name = L"napiecie";
            this->napiecie->Size = System::Drawing::Size(148, 26);
            this->napiecie->TabIndex = 27;
            this->napiecie->Text = L"380";
            // 
            // label3
            // 
            this->label3->AutoSize = true;
            this->label3->Location = System::Drawing::Point(16, 135);
            this->label3->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label3->Name = L"label3";
            this->label3->Size = System::Drawing::Size(53, 20);
            this->label3->TabIndex = 26;
            this->label3->Text = L"Un [V]";
            // 
            // textBox1
            // 
            this->textBox1->Location = System::Drawing::Point(21, 91);
            this->textBox1->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->textBox1->Name = L"textBox1";
            this->textBox1->Size = System::Drawing::Size(148, 26);
            this->textBox1->TabIndex = 25;
            this->textBox1->Text = L"15000";
            this->textBox1->TextChanged += gcnew System::EventHandler(this, &Form1::textBox1_TextChanged);
            // 
            // label2
            // 
            this->label2->AutoSize = true;
            this->label2->Location = System::Drawing::Point(16, 65);
            this->label2->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label2->Name = L"label2";
            this->label2->Size = System::Drawing::Size(55, 20);
            this->label2->TabIndex = 24;
            this->label2->Text = L"Pn [W]";
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
                static_cast<System::Byte>(238)));
            this->label1->Location = System::Drawing::Point(15, 15);
            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(223, 29);
            this->label1->TabIndex = 23;
            this->label1->Text = L"Par. Znamionowe:";
            this->label1->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
            // 
            // label17
            // 
            this->label17->AutoSize = true;
            this->label17->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
                static_cast<System::Byte>(238)));
            this->label17->Location = System::Drawing::Point(267, 303);
            this->label17->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label17->Name = L"label17";
            this->label17->Size = System::Drawing::Size(139, 29);
            this->label17->TabIndex = 47;
            this->label17->Text = L"Symulacja:";
            this->label17->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
            // 
            // label18
            // 
            this->label18->AutoSize = true;
            this->label18->Location = System::Drawing::Point(268, 340);
            this->label18->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label18->Name = L"label18";
            this->label18->Size = System::Drawing::Size(174, 20);
            this->label18->TabIndex = 48;
            this->label18->Text = L"ilość okresów amplitudy";
            // 
            // okres_amp
            // 
            this->okres_amp->Location = System::Drawing::Point(273, 378);
            this->okres_amp->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->okres_amp->Name = L"okres_amp";
            this->okres_amp->Size = System::Drawing::Size(148, 26);
            this->okres_amp->TabIndex = 49;
            this->okres_amp->Text = L"2";
            // 
            // label15
            // 
            this->label15->AutoSize = true;
            this->label15->Location = System::Drawing::Point(852, 135);
            this->label15->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label15->Name = L"label15";
            this->label15->Size = System::Drawing::Size(0, 20);
            this->label15->TabIndex = 51;
            // 
            // label16
            // 
            this->label16->AutoSize = true;
            this->label16->Location = System::Drawing::Point(828, 135);
            this->label16->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label16->Name = L"label16";
            this->label16->Size = System::Drawing::Size(0, 20);
            this->label16->TabIndex = 52;
            // 
            // label14
            // 
            this->label14->AutoSize = true;
            this->label14->Location = System::Drawing::Point(888, 135);
            this->label14->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
            this->label14->Name = L"label14";
            this->label14->Size = System::Drawing::Size(0, 20);
            this->label14->TabIndex = 53;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(9, 20);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(1132, 463);
            this->Controls->Add(this->label14);
            this->Controls->Add(this->label16);
            this->Controls->Add(this->label15);
            this->Controls->Add(this->okres_amp);
            this->Controls->Add(this->label18);
            this->Controls->Add(this->label17);
            this->Controls->Add(this->label13);
            this->Controls->Add(this->label12);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->label11);
            this->Controls->Add(this->label10);
            this->Controls->Add(this->label9);
            this->Controls->Add(this->pred_zadana);
            this->Controls->Add(this->label8);
            this->Controls->Add(this->label7);
            this->Controls->Add(this->bieguny);
            this->Controls->Add(this->label6);
            this->Controls->Add(this->czestotliwosc);
            this->Controls->Add(this->label5);
            this->Controls->Add(this->predkosc);
            this->Controls->Add(this->label4);
            this->Controls->Add(this->napiecie);
            this->Controls->Add(this->label3);
            this->Controls->Add(this->textBox1);
            this->Controls->Add(this->label2);
            this->Controls->Add(this->label1);
            this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
            this->Margin = System::Windows::Forms::Padding(4, 5, 4, 5);
            this->Name = L"Form1";
            this->Text = L"Falownik Napięcia z modulacją szerokości impulsów MSI";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        // deklaracja zmiennych         
        double n1, ns, fs, sn, f, pred_z, nap_U, x, U;
        double  t, tt = 0, y_sin, roz_t;
        double pi = 3.14159265359;
        int i = 0, x0;
        double y0;
        double T = 0;   // okres przebiegu
        int pb;   // liczba par biegunów


                  //label14->Text = ("|");

        fs = Convert::ToDouble(czestotliwosc->Text);
        pb = Convert::ToInt16(bieguny->Text);
        n1 = (60 * fs) / pb;
        ns = Convert::ToDouble(predkosc->Text);
        sn = (n1 - ns) / n1;
        sn = (int)(sn * 1000) / 1000.0;    // Odcinanie cyfr po przecinku

        pred_z = Convert::ToDouble(pred_zadana->Text);
        f = (pred_z*pb) / (60 * (1 - sn));
        T = (1 / f) * 1000;
        f = (int)(f * 10) / 10.0; // Odcinanie cyfr po przecinku

        T = (int)(T * 10) / 10.0; // Odcinanie cyfr po przecinku

        label16->Text = ("T=");
        label14->Text = ("ms");
        label15->Text = Convert::ToString(T);

        nap_U = Convert::ToDouble(napiecie->Text);
        x = nap_U / fs;
        U = x*f;
        U = (int)(U * 10) / 10.0; // Odcinanie cyfr po przecinku

        double wsp_nap;
        wsp_nap = U / nap_U; // amplituda sinusoidy 

        label12->Text = Convert::ToString(U);
        label13->Text = Convert::ToString(f);
        //label16->Text = Convert::ToString(wsp_nap);

        Graphics^ g1 = this->CreateGraphics();
        g1->Clear(Color::White);                 // Czyszczenie obrazu
        Pen^ pioro1 = gcnew Pen(System::Drawing::Color::Black);
        Pen^ pioro2 = gcnew Pen(System::Drawing::Color::Black);
        Pen^ pioro3 = gcnew Pen(System::Drawing::Color::Red);
        pioro1->Width = 2;
        pioro2->Width = 1;
        pioro3->Width = 2;

        g1->DrawLine(pioro1, 405, 0, 750, 0);   // ramka górna
        g1->DrawLine(pioro1, 750, 0, 750, 160);
        g1->DrawLine(pioro1, 750, 160, 405, 160);
        g1->DrawLine(pioro1, 405, 160, 405, 0);

        g1->DrawLine(pioro2, 405, 80, 750, 80);  //oś górna x
        g1->DrawLine(pioro2, 405, 235, 750, 235);   //oś górna x

        g1->DrawLine(pioro1, 405, 165, 750, 165);   // ramka dolna
        g1->DrawLine(pioro1, 750, 165, 750, 305);
        g1->DrawLine(pioro1, 750, 305, 405, 305);
        g1->DrawLine(pioro1, 405, 305, 405, 165);

        int okres;
        int sinus_tab[345];


        okres = Convert::ToInt32(okres_amp->Text);

        t = okres / f;          // czas 2 okresów sinusoidy o czestotliwosci f

        roz_t = t / 345;     //Rozdzielczość czasu na osi x, 345 piksele



        while (tt <= t)         // pętla rysująca sinusoidę
        {

            if (tt == 0)                // pierwszy punkt
            {
                y_sin = wsp_nap * sin(2 * pi*f*tt) * 70;
            }
            else
            {
                y_sin = wsp_nap * sin(2 * pi*f*tt) * 70;

                g1->DrawLine(pioro3, x0 + 405, 80 - Convert::ToInt32(y0), i + 405, 80 - Convert::ToInt32(y_sin));

            }
            y0 = y_sin;
            x0 = i;

            sinus_tab[i] = 80 - Convert::ToInt32(y0); // tablica elementów sinusa

            tt = tt + roz_t;
            i = i + 1;

        }

        //Rysowanie trójkąta
        i = 0;
        int tr = 0, tr0 = 0;
        int troj_tab[345];

        while (i <= 345)
        {
            if (i == 0)
            {
                tr0 = 80;
                troj_tab[i] = tr0;
            }

            if (i <= 10 && i > 0)
            {
                tr = 80 - 8 * i;
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 10 && i <= 30)
            {
                tr = 0 + 8 * (i - 10);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 30 && i <= 50)
            {
                tr = 160 - 8 * (i - 30);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 50 && i <= 70)
            {
                tr = 0 + 8 * (i - 50);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 70 && i <= 90)
            {
                tr = 160 - 8 * (i - 70);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 90 && i <= 110)
            {
                tr = 0 + 8 * (i - 90);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 110 && i <= 130)
            {
                tr = 160 - 8 * (i - 110);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 130 && i <= 150)
            {
                tr = 0 + 8 * (i - 130);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 150 && i <= 170)
            {
                tr = 160 - 8 * (i - 150);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 170 && i <= 190)
            {
                tr = 0 + 8 * (i - 170);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 190 && i <= 210)
            {
                tr = 160 - 8 * (i - 190);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 210 && i <= 230)
            {
                tr = 0 + 8 * (i - 210);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 230 && i <= 250)
            {
                tr = 160 - 8 * (i - 230);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 250 && i <= 270)
            {
                tr = 0 + 8 * (i - 250);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            if (i > 270 && i <= 290)
            {
                tr = 160 - 8 * (i - 270);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 290 && i <= 310)
            {
                tr = 0 + 8 * (i - 290);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 310 && i <= 330)
            {
                tr = 160 - 8 * (i - 310);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }
            if (i > 330 && i <= 345)
            {
                tr = 0 + 8 * (i - 330);
                g1->DrawLine(pioro2, 405 + i, tr0, 405 + i + 1, tr);
                tr0 = tr;
                troj_tab[i] = tr0;
            }

            i = i + 1;
        }


        i = 0;
        int fal = 0;
        int fal0 = 0;
        while (i <= 345)
        {
            if (i == 0)
            {
                if (sinus_tab[i] <= troj_tab[i])
                {
                    fal0 = 185;
                }
                else
                {
                    fal0 = 285;
                }
            }
            else
            {
                if (sinus_tab[i] <= troj_tab[i])
                {
                    fal = 185;

                }
                else
                {
                    fal = 285;

                }
                g1->DrawLine(pioro3, 405 + i - 1, fal0, 405 + i, fal);
                fal0 = fal;
            }

            i = i + 1;
        }

    }



    private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
    }
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    }

    };
}
Alan Stokes
  • 18,815
  • 3
  • 45
  • 64
dragi
  • 21
  • 5
  • From Urfin Jus's HuntErr Programmers' Guide, "Errors are good—They help us find bugs." VS 2015 has helped you find a "latent bug" by improving error checking in debug builds. – Tom Blodget Dec 28 '15 at 16:00

1 Answers1

2
    int sinus_tab[345];
    while (i <= 345) {
        sinus_tab[i] = 80 - Convert::ToInt32(y0); // tablica elementów sinusa
    }

Highlighting the lines of code that cause this runtime error. You have an off-by-one bug in your code. The last valid index in sinus_tab[] is 344. But you are writing sinus_tab[345], the while-loop condition should probably be i < 345. This is a buffer-overflow bug, it randomly corrupts the stack frame. This kind of memory corruption can go undetected.

You have the exact same bug in troj_tab[].

Buffer overflow bugs like this are a notorious virus attack vector, it allows manipulating the program with data. In this particular case you did not see any ill effects but you could for example overwrite the return address. Making the program jump to an arbitrary location.

Microsoft put counter-measures into place to stop these kind of attacks since .NET 4.0 (VS2010). Your bug is tripping this buffer-overflow detection mechanism, it overwrites the stack canary and your program correctly aborts.

Use a managed array instead so you can detect bugs like this early, you get an IndexOutOfRangeException. Fix:

   array<int>^ sinus_tab = gcnew array<int>(345);
Hans Passant
  • 922,412
  • 146
  • 1,693
  • 2,536