Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2009, 16:00   #1
delias
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 27
По умолчанию HEAP CORRUPTION удаляю массив

в целом код рабочий, однако если раскомментировать строки удаления массива и деструктора, то вылазит HEAP CORRUPTION.
подскажите, я что не правильно удаляю как-то??

Код:
class CStrings {
    char **str;
    int size, count; //размер и кол-во заполненных строк
public:
    CStrings (int n);
   //~CStrings();
    void Add(char *s);
    void print();
    void del(int n);
    void deleteall ();
};

CStrings::CStrings(int n){
    size=n;
    str=new char*[n];
    count=0;
}
void CStrings::Add (char *s){
    str[count]=new char[strlen(s)+1];
    strcpy(str[count],s);
    count++;
}

//CStrings::~CStrings(){
//    for (int i=0;i<count;i++)
//    delete[]str[i];
//    delete[]str;
//}
void CStrings::print(){
    for (int i=0; i<count;i++)
        cout<<str[i]<<endl;
}
void CStrings::del(int n){  
    char **strcopy = new char *[count-1];
    for (int i=0,j=0;j<count;j++)
    {
        if (j!=n){
    strcopy[i]=new char [strlen(str[j])];
    strcpy(strcopy[i],str[j]);
    i++;
        }
    }

   /*for (int i=0;i<count;i++)
    delete[]str[i];
    delete[]str;*/

    count--;
    str=strcopy;

   /*for (int i=0;i<count;i++)
    delete[]strcopy[i];
    delete[]strcopy;*/
}

    void main()
    {
        CStrings s(20);
        s.Add("First");
        s.Add ("Second");
        s.Add ("Third");
        s.Add ("Four");
        s.Add ("Five");
        s.print ();
        s.del(3);
        cout<<endl;
        s.print ();
    }

Последний раз редактировалось Stilet; 10.12.2009 в 10:18.
delias вне форума Ответить с цитированием
Старый 10.12.2009, 10:17   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Наверное, нужно
Код:
char **strcopy = new char *[count];
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка malloc(): memory corruption Роман Радер Общие вопросы C/C++ 6 03.10.2009 19:34
Помогите справиться с java.lang.OutOfMemoryError: Java heap space Levilaulada Помощь студентам 1 17.05.2009 10:59
Heap. Пaвeл Помощь студентам 2 03.05.2009 13:20
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06