Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
voytenkosveta
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 2
1

Heap Corruption Detected

14.12.2015, 21:13. Просмотров 1186. Ответов 4
Метки нет (Все метки)

Выдает ошибку HEAP CORRUPTION DETECTED, судя по всему где то ошиблась с распределением памяти
Предполагаю, что ошибка прячется в районе 71-73 стр, но никак не могу понять, где именно косяк

Текст задания:
Создать шаблон класса для работы с массивом произвольного типа данных.
Шаблон должен включать:
-указатель, хранящий адрес размещения массива в динамической памяти;
-целочисленную переменную, показывающую количество занятых элементов массива;
-конструктор без параметров с параметрами по умолчанию;
-метод «обработка массива» (на начальном этапе метод выводит на консоль какое-либо сообщение);
деструктор.
и другие необходимые для работы методы (например, перегрузка операций индексирования и присваивания, методы ввода / вывода и т.д.).
Задание: Дана строка латинских символов. Преобразовать строку, разместив символы в алфавитном порядке, разделяя их пробелами. Для созданного программного обеспечения провести тестирование на нескольких случайных наборах данных.

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
#include <iostream>
#include <string>
 
using namespace std;
 
template<typename T>
class A {
private:
    T* array;
public:
    int size;
    ~A(){
        delete[] array;
    }
    int &operator [] (int index){
        if (index < size && index >= 0){
            return array[index];
        }
        else{
            throw "Выход за границы массива!\n";
        }
    }
    A() {};
    A(T*, int);
    A(const A&);
    void enter();
    void print();
    void action();
};
 
template<typename T>
void A <T> ::action(){
    char *s = array;
    int i, j, l;
    char tmp;
    l = strlen(s);
    for (i = 0; i<l; i++)
    for (j = 0; j<l; j++)
    if (*(s + j) > *(s + i)){
        tmp = *(s + i);
        *(s + i) = *(s + j);
        *(s + j) = tmp;
    }
    cout << endl << "Данные после обработки имеют вид:" << endl;
    cout << array[0];
    for (i = 1; i<l; i++){
        cout << " " << array[i];
    }
    cout << endl;
}
 
template<typename T>
A <T> ::A(const A& a) : array(a.array), size(a.size) {}
 
template<typename T>
A <T> ::A(T* a, int n){
    if (n < 0 || n > INT_MAX){
        throw "Некорректный размер массива!";
    }
    array = a;
    size = n;
}
 
template<typename T>
void A <T> ::enter(){
    setlocale(LC_ALL, "Russian");
    string str;
    array = new T[];
    cout << "Введите данные: " << endl;
    getline(cin, str);
    this->size = (int)str.length();
    for (int k = 0; k <= this->size; k++){
        array[k] = str[k];
    }
}
 
 
 
int main(){
    setlocale(LC_ALL, "Russian");
    A <char> x;
    x.enter();
    x.action();
    
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2015, 21:13
Ответы с готовыми решениями:

Heap corruption detected
При попытке очистить память выдает &quot;Heap corruption detected&quot;. Помогите пожалуйста( //...

HEAP CORRUPTION DETECTED
Собственно такую ошибку выдаёт: &quot;HEAP CORRUPTION DETECTED: after Normal block (#220) at 0x001970B8....

Heap Corruption detected (
что не правильно? запускаю и ошибка вылетает как на предидущей картинке template&lt;typename TT&gt;...

Heap corruption detected
Добрый день! Проблема вот в чём: когда выполнение кода доходит до 163 строки, появляется ошибка: &quot;...

Heap corruption detected
Heap corruption на строке 93 при первом же выполнении цикла. Из-за чего? #include &lt;locale.h&gt; //...

4
Kuzia domovenok
2569 / 2241 / 565
Регистрация: 25.03.2012
Сообщений: 8,108
Записей в блоге: 1
Завершенные тесты: 1
14.12.2015, 21:21 2
C++
1
    array = new T[];
это вообще что означает?

Добавлено через 45 секунд
ты изобрёл новый способ выделять память, не зная размера?
0
avgoor
1049 / 616 / 158
Регистрация: 05.12.2015
Сообщений: 1,749
14.12.2015, 21:22 3
В деструкторе память удаляется, а кто ее в конструкторе выделять будет?
0
zss
Модератор
Эксперт С++
8108 / 7242 / 4508
Регистрация: 18.12.2011
Сообщений: 19,153
Завершенные тесты: 1
14.12.2015, 21:26 4
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

под массив память надо выделять ВСЕГДА и данные КОПИРОВАТЬ!
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
template<typename T>
A<T>::A():size(0),array(NULL){}
 
template<typename T>
A <T> ::A(const A& a):size(a.size) 
{
    this->array=new T[size+1];
    strcpy(this->array,a.array);
}
 
template<typename T>
A <T> ::A(T* a, int n)
{
    this->size=strlen(a);
    if(this->size<n)
        this->size=n;
    this->array=new T[size+1];
    strcpy(this->array,a);
}
 
template<typename T>
void A <T> ::enter()
{
    setlocale(LC_ALL, "Russian");
    string str;
    cout << "Введите данные: " << endl;
    getline(cin, str);
    if(this->array!=NULL)
        delete[] this->array;
    this->size = (int)str.length();
    this->array = new T[size+1];
    strcpy(this->array,str.c_str());
}
0
voytenkosveta
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 2
14.12.2015, 21:42  [ТС] 5
спасибо всем огромное! такая ошибка глупая, а билась часа 2
0
14.12.2015, 21:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2015, 21:42

Heap corruption detected
Ошибка возникает после отработки программы Заголовочный файл: #pragma once #include&lt;iostream&gt;...

Heap corruption detected
Возникает эта ошибка при выполнении функции Strings::Append (строка 81, в меню это пункт 3)....

heap corruption detected
имеется класс CStr - строка, в нём есть конструктор CStr CStr::CStr(char *s) { length = 0;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru