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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 23:27   #1
gor2521
Новичок
Джуниор
 
Регистрация: 03.07.2012
Сообщений: 1
По умолчанию Динамическая память. Исключение.

Всем доброго времени суток!
Предисловие: Имеется задание на связные списки. Суть задания не важна, но вкратце: по входным строкам формировать дерево папок. Используемый мною язык, очевидно, c++, который четкой родственной связи со мной проявлять, пока что, не сильно желает.

Проблема, как она есть: При выделении памяти под структуру данных (в листинге строка #39), при помощь оператора new, обрабатывается исключение: std::bad_alloc.

Суть вопроса: Нужна помощь в поиске места, где предположительно портится куча.

Нотабене: Критика в сторону плохого английского языка в комментариях к коду, иррациональности выполнения каких-либо действий с удовольствием принимаются!

Код:
  //Main Loop
  for (int i = 0; i < adressNum; i++)
  {
    in >> maxAdress;
    adressLen = strlen(maxAdress);
    adress = new char[adressLen + 1];
    strcpy_s(adress, adressLen + 1, maxAdress);
 
    /*After we will one buy one part adress string on Folder Names and 
    with few rules add them into Folder Lists, data, which need to be
    given together with FolderName is:
     a. Level of folder (Ex. "C\Files\Games" C has level 0, Files - 1, etc)
     b. Parant name (For ex. above: "C" folder is parant for folder "Files")
     */
    char *curFolder = NULL;
    char *curParent = NULL;
    int curLevel = 0, j = 0;
 
    /*At first reading ROOT folder and choosing List in fList array
    in which we will add folders form adress. It can be new list or already list,
    which already exist*/
    curParent = new char[MAX_FOLDER_NAME + 1];
    curFolder = new char[MAX_FOLDER_NAME + 1];
    ReadFolder(adress, j, curFolder); 
 
    while (fList[j].Head() != NULL)
    {
      if (!strcmp(fList[j].Head(), curFolder))
        break;
      j++;
    }
 
    listNum = j;
    j = strlen(curFolder) + 1;
 
    
    for (j; j < adressLen; j = j + strlen(curFolder) + 1)
    {
      FolderListItem *newItem = new FolderListItem(curFolder, curLevel, curParent);
      fList[listNum].AddInOrder(newItem);
 
 
      curLevel++;
 
      strcpy_s(curParent, MAX_FOLDER_NAME + 1, curFolder);
 
      ReadFolder(adress, j, curFolder);
 
    }
    fList[listNum].PrintList(outputFile);
 
    delete [] curParent;
    delete [] curFolder;
    delete [] adress;
  }
PS: На всякий случай прикрепляю заголовочный файл с описанием класса для списка, файл с его реализацией и мэйн.
Вложения
Тип файла: txt FolderListCpp.txt (1.7 Кб, 140 просмотров)
Тип файла: txt FolderListH.txt (1.6 Кб, 146 просмотров)
Тип файла: txt mainCpp.txt (2.8 Кб, 148 просмотров)
gor2521 вне форума Ответить с цитированием
Старый 19.09.2012, 23:44   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

gor2521

Используемый мною язык, очевидно, c++

Очевидно, ты используешь Си, а не C++. Вот такая оказия... o_O

Что нужно сделать: выкинуть нах все аллокации типа new/delete и использовать класс std::string

а к строкам вида char* вернуться, когда станешь гуру C++ и будешь чётко понимать зачем оно тебе.
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память vladxxl Общие вопросы C/C++ 0 25.04.2011 20:04
Динамическая память С++ onewho Помощь студентам 4 04.02.2011 17:27
Динамическая память Ledom Общие вопросы C/C++ 9 26.11.2010 00:07
Динамическая память. spotmc13 Паскаль, Turbo Pascal, PascalABC.NET 5 20.09.2010 17:08
динамическая память zhenya.ya Помощь студентам 2 24.02.2010 20:58