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

Heap corruption detected - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычисление стоимости продукции с учетом скидки http://www.cyberforum.ru/cpp-beginners/thread953216.html
Написать алгоритм программы вычисление стоимости продукции с учетом скидки. Скидка 3% представляется, если сумма больше 500 руб, 5% если сумма 1000 руб. Программа должна работать с произвольным количеством покупки.
C++ Как создать двоичный файл и записать в него n целых чисел? народ!как создать двоичный файл и записать в него n целых чисел. Из файла сформировать массив, записав в него только ненулевые компоненты, находящиеся после максимального элемента.? http://www.cyberforum.ru/cpp-beginners/thread953213.html
Простой массив C++
Написал программу. #include <iostream> using namespace std; int main() { int b; cout << "Vvedite koli4estvo kustov: "; cin >> b;
C++ Перевод
Помогите перевести в C++ const n=5; m=5; var b:arrayof integer; i,j,jmx,jmn,t:integer; begin randomize; for i:=1 to n do begin for j:=1 to n do
C++ Дан целочисленный массив В(1..5, 1..5). Найти количество положительных элементов данного массива, расположеных выше левой диагонали. http://www.cyberforum.ru/cpp-beginners/thread953173.html
Дан целочисленный массив В(1..5, 1..5). Найти количество положительных элементов данного массива, расположеных выше левой диагонали.
C++ Подключение сторонних файлов Добрый день! Я новичок в С++ и программировании вообще. Если мой вопрос покажется идиотским, все таки хоть как то объясните. Я изучаю С++ по книгам. Выучил несколько приемчиков, написал несколько учебных программ в консольке и.т.д. Парралельно я решил поставить и решить большую задачу ( в качестве обучения). Например создание приложения. Наверное (как у каждого приложения) необходимо создать... подробнее

Показать сообщение отдельно
sicknessed
1 / 1 / 0
Регистрация: 20.03.2013
Сообщений: 12
12.09.2013, 17:57     Heap corruption detected
Добрый день! Проблема вот в чём: когда выполнение кода доходит до 163 строки, появляется ошибка: " HEAP CORRUPTION DETECTED: after Normal block (#752) at 0x0038A5D8. CRT detected that the application wrote to memory after end of heap buffer". Получается, что это ошибка происходит при вызове деструктора моего класса. Но, вот, в чём именно там ошибка, я, увы, разобраться не могу.
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
 
class Matr {
    public:
        Matr(const int row, const int column);
        ~Matr();
        void printMatr(int count);
        bool addStr(char* str, int number);
        void setNumberOfColumn(int i);
        int getNumberOfColumn();
        int getNumberOfRow();
        void sortBubble();
        void sortSelection();
        char** body;
    private:
        int numberOfColumn;
        int numberOfRow;
        static int numberOfBubbleCompare;
        static int numberOfBubbleChange;
        static int numberOfSelectionCompare;
        static int numberOfSelectionChange;
};
 
Matr::Matr(const int row = 1, const int column = 0){
    body = new char*[row];
    for(int i = 0; i < column; i++){
        body[i] = new char[column];
    }
    numberOfColumn = column;
    numberOfRow = row;
}
 
Matr::~Matr(){
    for(int i = 0; i < numberOfRow; i++){
        delete body[i];
    }
    delete[] body;
}
 
void Matr::setNumberOfColumn(int i){
    numberOfColumn = i;
}
 
int Matr::getNumberOfColumn(){
    return numberOfColumn;
}
 
int Matr::getNumberOfRow(){
    return numberOfRow;
}
 
bool Matr::addStr(char* str, int number){
    using namespace std;
    /*if (sizeof(str)/sizeof(char*) != numberOfColumn){
        cout << "Неверное количество столбцов! Это не может быть матрицей!" << endl;
        return false;
    }*/
    for(int i = 0; i <= numberOfColumn; i++){
        this->body[number][i] = str[i];
    }
    return true;
}
 
void Matr::printMatr(int count){
    using namespace std;
    for(int i = 0; i <= count; i++){
        for(int k = 0; k < numberOfColumn; k++){
            cout << body[i][k] << " ";
        }
        cout << endl;
    }
}
 
void Matr::sortBubble(){
    for(int j = 0; j < numberOfRow; j++){
        for(int i = 1; i < numberOfColumn; ++i){
            for(int k = numberOfColumn-1; k >= i; --k) { 
                if(body[j][k-1] > body[j][k]) { 
                    char t = body[j][k-1]; 
                    body[j][k-1] = body[j][k]; 
                    body[j][k] = t; 
                    numberOfBubbleChange++;
                }
                numberOfBubbleCompare++;
            } 
        }
    }
}
 
void Matr::sortSelection(){
    for(int k = 0; k < numberOfRow; k++){
        for(int i = 0; i < numberOfColumn-1; ++i) { 
            bool flag = false; 
            int c = i; 
            char t = body[k][i]; 
            for(int b = i+1; b < numberOfColumn; ++b) { 
                if(body[k][b] < t) { 
                    c = b; 
                    t = body[k][b]; 
                    flag = true; 
                }
                numberOfSelectionCompare++;
            } 
            if(flag) { 
                body[k][c] = body[k][i]; 
                body[k][i] = t; 
                numberOfSelectionChange;
            } 
        } 
    }
}
 
 
int Matr::numberOfBubbleCompare = 0;
int Matr::numberOfBubbleChange = 0;
int Matr::numberOfSelectionCompare = 0;
int Matr::numberOfSelectionChange = 0;
 
void deleteChar(char *string, int number){
    for(int k = number; k < strlen(string); k++){
        string[k] = string[k+1];
    }
}
 
int deleteSpaces(char* str){
    int i = 0;
    while(str[i] != '\n'){
        if(isspace(str[i])){
            deleteChar(str, i);
        }else{
            i++;
        }
    }
    return i;
}
int main(){
    using namespace std;
    setlocale(0,"");
    bool flagOfRepeat = false;
    do{
        cout << "Введите имя файла, из которого нужно считать матрицу: ";
        string nameOfFile;
        cin >> nameOfFile;
        ifstream f(nameOfFile);
        if(f && !f.eof()){
            char* p = new char[255];
            f.getline(p, 255);
            p[strlen(p)] = '\n';
            Matr matr(10,deleteSpaces(p));                  //Создание матрицы и удаление из р пробелов
            int countOfRow = 0;
            matr.addStr(p, countOfRow);
            while(!f.eof()){
                countOfRow++;
                f.getline(p,255);
                p[strlen(p)] = '\n';
                deleteSpaces(p);
                matr.addStr(p, countOfRow);
            }
            matr.printMatr(countOfRow);         
        }else{  
            cout << "Ошибка открытия файла!" << endl;
        }
        cout << "Хотите считать данные из другого файла? Если да, введите 1, нет - любую другую клавишу: ";
        char i;
        cin >> i;
        if(i != '1'){
            flagOfRepeat = false;
        }
    }while(flagOfRepeat);
    _getch();
return 0;
}
Буду благодарен за помощь!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru