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

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

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

heap corruption detected - C++

18.03.2013, 23:57. Просмотров 943. Ответов 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".. а в чём проблема, понять не могу
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 23:57     heap corruption detected
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
19.03.2013, 00:15     heap corruption detected #2
Конструктор можно попроще написать.
C++
1
CStr(const char *s) : length(strlen(s)), str(strcpy(new char[length + 1], s)) {}
Цитата Сообщение от Homeless coder Посмотреть сообщение
при вызове деструктора вылезает сообщение - "heap corruption detected"
Вариантов много. Возможно, где-то сместили или уже освободили str. Покажите весь код.
Homeless coder
5 / 5 / 0
Регистрация: 17.03.2013
Сообщений: 24
19.03.2013, 00:28  [ТС]     heap corruption detected #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();
}
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
19.03.2013, 01:02     heap corruption detected #4
str[length+1] = '\0'; заменить на str[length] = '\0';
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2013, 01:14     heap corruption detected
Еще ссылки по теме:

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

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

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

Heap corruption detected after normal block - C++
выкидывает ошибку при попытке освободить память массива, делаю так: char **Items; ... free(Items);

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

HEAP CORRUPTION DETECTED не могу найти ошибку - C++
код весь прорабатывает, но в конце выдаёт HEAP CORRUPTION через дебаг прогнал но так и не нашел ничего может вы подскажите на что...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7168 / 4334 / 633
Регистрация: 29.11.2010
Сообщений: 11,781
19.03.2013, 01:14     heap corruption detected #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();
Yandex
Объявления
19.03.2013, 01:14     heap corruption detected
Ответ Создать тему
Опции темы

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