Форум программистов, компьютерный форум CyberForum.ru

Run-Time Check Failure #2 - Stack around the variable 'tek' was corrupted - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Восьмиразрядное двоичное число в десятичное http://www.cyberforum.ru/cpp-beginners/thread1125973.html
Преобразует введенное с клавиатуры восьмиразрядное двоичное число в десятичное.
C++ Матрица, сумма строчек Вообщем мне нужно подправить вывод матрицы(чтобы выводилась как матрица и сумму строчек // matraca.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <locale> #define a 3 #define b 3 http://www.cyberforum.ru/cpp-beginners/thread1125970.html
Байты считанны по одному. Как обьедянить в одно целое? C++
Хай народ.. У меня прикол в том что я в цикле читаю по одному байту, пока байт не будет определенного события... Тоесть Я прочитал 1 байт, если не подходит, идем дальше.. Вообщем нужно сделать так чтобы с этих всех байтов собрать все вместе... Что то типо byte+byte+.... Вот код: int nolasit = 0; byte read_buf = new byte; for (int i = 0; i <= nolasit; i++) ...
Коэффициенты полинома C++
подскажите пожалуйста, каким методом нужно считать коэффициенты? как составить программу для их вычисления?
C++ Перегрузка оператора = http://www.cyberforum.ru/cpp-beginners/thread1125933.html
Ещё раз всем привет! Недавно разместила у себя "лайт-вершин" своего вектора - int_array. И все дружно начали мне говорить, что у меня неверно реализован перегруз '='. Но, написав тестовый код, всё работает как нужно! Объясните нубёнку что не так в моем перегрузе? Не понимаю! Сам перегруз. const int& int_array::operator= (const int_array& in) { size = in.size; capacity =...
C++ Программа поиска элементов массива Задан числовой массив А. Составить программу поиска элементов массива, которые является наименьшим из отрицательных чисел, расположенных над главной диагональю и наименьшим из положительных чисел в той же области. подробнее

Показать сообщение отдельно
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
21.03.2014, 17:35     Run-Time Check Failure #2 - Stack around the variable 'tek' was corrupted
Собственно, работаю с длинными числами, пытаюсь организовать деление.
Ошибка появляется, естественно, в podeliti.cpp.

include.h:
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
#ifndef INCLUDE_H
#define INCLUDE_H
 
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <iostream>
using std::cout;
using std::endl;
#include <conio.h>
#include <stdlib.h>
using std::atoi;
#define vyvoditi
 
struct Chislo
{
    int k;
    int ts[50];
};
 
void Prochitati(ifstream &, Chislo &);
void Vyvesti(const Chislo &);
void Podeliti(const Chislo &, const Chislo &, Chislo &, Chislo &);
void Pribaviti(Chislo &, const Chislo &);
int Sravniti(const Chislo &, const Chislo &);
void Sdvinuti_vpravo1(Chislo &);
void Vychesti(Chislo &, const Chislo &);
 
#endif
podeliti.cpp:
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 "include.h"
 
void Podeliti(const Chislo &a, const Chislo &b, Chislo &res, Chislo &ost)
{
    res.k = 0;
    if (a.k < b.k)
        return;
 
    Chislo tek;
    int mnoj;
    tek.k = 0;
    int ia = a.k - 1; // находимся на первой цифре а
 
    while (ia >= 0)
    {
        while (Sravniti(tek,b) < 0 && ia >= 0)
        {
            Sdvinuti_vpravo1(tek);
            tek.ts[0] = a.ts[ia];
            ia--;
        }
 
#ifdef vyvoditi
        cout << "tek = ";
        Vyvesti(tek);
        getch();
#endif
 
        if (Sravniti(tek,b) < 0)
        {
            ost.k = tek.k;
            for (int i = 0; i < tek.k; i++)
                ost.ts[i] = tek.ts[i];
            return;
        }
 
        mnoj = 0;
 
        while (Sravniti(tek,b) >= 0)
        {
            mnoj++;
            Vychesti(tek,b);
#ifdef vyvoditi
            cout << "Posled vychitania tek = ";
            Vyvesti(tek);
            getch();
#endif
        }
 
        Sdvinuti_vpravo1(res);
        res.ts[0] = mnoj;
#ifdef vyvoditi
        cout << "Tekuschaia tsifra resultata: " << mnoj << endl;
        getch();
#endif
    }
 
    ost.k = tek.k;
    for (int i = 0; i < tek.k; i++)
        ost.ts[i] = tek.ts[i];
}
Остальные файлы программы

Test.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "include.h"
 
int main()
{
    Chislo a,b,res,ost;
    ifstream fin("C:\\in.txt");
 
    Prochitati(fin,a);
    Prochitati(fin,b);
    fin.close();
 
    Vyvesti(a);
    Vyvesti(b);
 
    Podeliti(a,b,res,ost);
    Vyvesti(res);
    Vyvesti(ost);
 
    getch();
    return 0;
}
vyvesti.cpp:
C++
1
2
3
4
5
6
7
8
#include "include.h"
 
void Vyvesti(const Chislo &a)
{
    for (int i = a.k - 1; i >= 0; i--)
        cout << a.ts[i];
    cout << endl;
}
vychesti.cpp:
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
#include "include.h"
 
void Vychesti(Chislo &a, const Chislo &b)
{
    int i = 0;
 
    while (i < b.k)
    {
        a.ts[i] -= b.ts[i];
        if (a.ts[i] < 0)
        {
            a.ts[i+1]--;
            a.ts[i] += 10;
        }
        i++;
    }
 
    while (a.ts[i] < 0)
    {
        a.ts[i] += 10;
        a.ts[i+1]--;
        i++;
    }
 
    while (a.ts[a.k-1] == 0)
        a.k--;
}
sravniti.cpp:
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
#include "include.h"
 
int Sravniti(const Chislo &a, const Chislo &b)
{
#ifdef vyvoditi
    cout << "Sravniti----------------------------------------------\n";
    Vyvesti(a);
    Vyvesti(b);
    getch();
#endif
    if (a.k > b.k)
    {
#ifdef vyvoditi
        cout << "> 0\n";
        cout << "------------------------------------------------------\n";
#endif
        return 1;
    }
    else
        if (a.k < b.k)
        {
#ifdef vyvoditi
            cout << "< 0\n";
            cout << "------------------------------------------------------\n";
#endif
            return -1;
        }
 
    for (int i = a.k - 1; i >= 0; i--)
        if (a.ts[i] > b.ts[i])
        {
#ifdef vyvoditi
            cout << "> 0\n";
            cout << "------------------------------------------------------\n";
#endif
            return 1;
        }
        else
            if (a.ts[i] < b.ts[i])
            {
#ifdef vyvoditi
                cout << "< 0\n";
                cout << "------------------------------------------------------\n";
#endif
                return -1;
            };
#ifdef vyvoditi
    cout << "= 0\n";
#endif
    return 0;
}
sdvinuti_vpravo1.cpp:
C++
1
2
3
4
5
6
7
8
#include "include.h"
 
void Sdvinuti_vpravo1(Chislo &a)
{
    for (int i = a.k; i > 0; i--)
        a.ts[i] = a.ts[i-1];
    a.k++;
}
prochitati.cpp:
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
#include "include.h"
 
void Prochitati(ifstream &fin, Chislo &a)
{
    a.k = 0;
    char ch;
 
    while (!fin.eof() && (ch = fin.get()) != '\n' && (int)ch != -1)
    {
        a.k++;
        char *str = new char[2];
        str[0] = ch;
        str[1] = 0;
        a.ts[a.k-1] = atoi(str);
    }
 
    void Swap(int &, int &);
    for (int i = 0; i < a.k/2; i++)
        Swap(a.ts[i],a.ts[a.k-1-i]);
}
 
void Swap(int &a, int &b)
{
    int c = a;
    a = b;
    b = c;
}
pribaviti.cpp:
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
#include "include.h"
 
void Pribaviti(Chislo &a, const Chislo &b)
{
    int i = 0, ost = 0;
 
    while (i < a.k && i < b.k)
    {
        ost += a.ts[i] + b.ts[i];
        a.ts[i] = ost%10;
        ost /= 10;
        i++;
    }
 
    if (a.k > b.k)
        while (ost > 0)
        {
            if (i >= a.k)
                a.k++;
            ost += a.ts[i];
            a.ts[i] = ost%10;
            ost /= 10;
            i++;
        }
    else
        if (a.k < b.k)
            while (i < b.k)
            {
                ost += b.ts[i];
                a.k++;
                a.ts[i] = ost%10;
                ost /= 10;
                i++;
            };
 
    while (ost > 0)
    {
        if (i >= a.k)
            a.k++;
        else
            ost += a.ts[i];
        a.ts[i] = ost%10;
        ost = ost/10;
        i++;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru