Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Homeless coder
5 / 5 / 0
Регистрация: 17.03.2013
Сообщений: 24
#1

heap corruption detected - C++

18.03.2013, 23:57. Просмотров 1011. Ответов 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 (C++):

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

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

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

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

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

Heap corruption detected - C++
При попытке очистить память выдает &quot;Heap corruption detected&quot;. Помогите пожалуйста( // labanext.cpp : Defines the entry point for the...

4
lemegeton
2925 / 1354 / 135
Регистрация: 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 / 0
Регистрация: 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
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
19.03.2013, 01:02 #4
str[length+1] = '\0'; заменить на str[length] = '\0';
1
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,591
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 - C++
Ошибка возникает после отработки программы Заголовочный файл: #pragma once #include&lt;iostream&gt; #include&lt;valarray&gt; ...

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

ошибка Heap corruption detected - C++
Доброго времени суток! подскажите пожалуйста что я не так сделал. При запуске программы вылетает ошибка в строке 34 // d.cpp: главный...

HEAP CORRUPTION DETECTED - не понятно почему - C++
Помогите пожалуйста. Есть такой код: double e; char* w; /////// POINT 1 string q; size_t pos; string...


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

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

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