Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Homeless coder
5 / 5 / 1
Регистрация: 17.03.2013
Сообщений: 24
1

heap corruption detected

18.03.2013, 23:57. Просмотров 1098. Ответов 4
Метки нет (Все метки)

имеется класс CStr - строка,
в нём есть конструктор CStr
C++
1
2
3
4
5
6
7
8
9
CStr::CStr(char *s)
{
    length = 0;
    while (s[length]) length++;
    str = new char[length+1];
        for (int i = 0; i < length; i++)
            str[i] = s[i];
    str[length+1] = '\0';
}
и есть деструктор
C++
1
~CStr() {delete [] str;};
но при вызове деструктора вылезает сообщение - "heap corruption detected".. а в чём проблема, понять не могу
Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 23:57
Ответы с готовыми решениями:

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

Heap Corruption Detected
Выдает ошибку HEAP CORRUPTION DETECTED, судя по всему где то ошиблась с распределением памяти...

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

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

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

4
lemegeton
2938 / 1367 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
19.03.2013, 00:15 2
Конструктор можно попроще написать.
C++
1
CStr(const char *s) : length(strlen(s)), str(strcpy(new char[length + 1], s)) {}
Цитата Сообщение от Homeless coder Посмотреть сообщение
при вызове деструктора вылезает сообщение - "heap corruption detected"
Вариантов много. Возможно, где-то сместили или уже освободили str. Покажите весь код.
0
Homeless coder
5 / 5 / 1
Регистрация: 17.03.2013
Сообщений: 24
19.03.2013, 00:28  [ТС] 3
собственно кода нет, начал писать класс и столкнулся с этой проблемкой
класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CStr
{
protected:
    char *str;
    int length;
public:
    CStr();
    CStr(char *s);
    CStr(char ch);
    ~CStr() {delete [] str;};
    
        int get_length() const {return length;};
        void show() const;
    
    void clear() {str = '\0'; length = 1;};
    
    CStr operator= (CStr & x);
    CStr operator+ (CStr & x);
    CStr operator== (CStr & x);
};
метод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CStr::CStr(char *s)
{
    length = 0;
    while (s[length]) length++;
    str = new char[length+1];
        for (int i = 0; i < length; i++)
            str[i] = s[i];
    str[length+1] = '\0';
}
void CStr::show() const 
{
    for (int i = 0; i < length; i++)
        cout << str[i];
}
main():
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <conio.h>
#include "class.h"
using namespace std;
void main()
{
    char *x = "hello my world";
    CStr B(x);
    B.show();
    B.~CStr();
    getch();
}
0
SummerRain
327 / 326 / 92
Регистрация: 16.12.2012
Сообщений: 544
19.03.2013, 01:02 4
str[length+1] = '\0'; заменить на str[length] = '\0';
1
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
19.03.2013, 01:14 5
Цитата Сообщение от Homeless coder Посмотреть сообщение
char *x = "hello my world";
такие вещи надо сразу const делать.

void main убрать, всю реализацию в хедере .h убрать

Добавлено через 1 минуту
C++
1
2
3
4
5
void CStr::show() const 
{
    for (int i = 0; i < length; i++)
        cout << str[i];
}
C++
1
2
3
4
void CStr::show() const 
{
        cout << str;
}
Добавлено через 3 минуты
Цитата Сообщение от lemegeton Посмотреть сообщение
Конструктор можно попроще написать.
C++
1
CStr(const char *s) : length(strlen(s)), str(strcpy(new char[length + 1], s)) {}
Главное, не забыть при этом местами поля поменять

Добавлено через 3 минуты
Проблема в том, что дважды вызывается деструктор. Удалите строку
C++
1
B.~CStr();
2
19.03.2013, 01:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2013, 01:14

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

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

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


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

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

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