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

Создание структуры "префиксное дерево". Ошибка "Access violation writing location". - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Композиция и иерархия http://www.cyberforum.ru/cpp-beginners/thread261583.html
Создать класс кнопка , которая имеет размер. Определить конструкторы и метод доступа. Создать класс окно, содержащее класс кнопка. Дополнительно есть координаты окна. Определить конструкторы и деструктор. Определить public-производный класс окно с кнопкой и меню (указатель на строку). Определить конструкторы, деструкторы и функцию печати. class Vikno{ public: int x; int y; public:
C++ Основные управляющие структуры Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале x_нач до x_кон с шагом dx с погрешностью е. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. За решение заранее благодарен! http://www.cyberforum.ru/cpp-beginners/thread261581.html
C++ Перегрузка операторов и доступ к закрытым членам
Поясните, пожалуйста, почему, когда при перегрузке операторов, елис как аргумент передается ссылка на обьект класса, то через эту ссылку мы имеем досуп з закрытым членам этого класса? Насколько я понял, закрытые данные не будут доступны черезщ обьект класса, а тут мы получаем к ним доступ. Пример из книги Дейтелов class Array { public: Array(int = 10); Array(Array &); //copy constructor...
Перевод с 2сс в любую C++
Помогите пожалуйста начинающему программисту написать алгоритм перевода двоичного числа в 8,10,16 системы счисления. Если можно с описанием что бы не скопировать, а разобраться.
C++ Работа с уже созданным файлом http://www.cyberforum.ru/cpp-beginners/thread261573.html
Запускаю программу,создаю при помощи функции файл(функцию создания файла уже не скидывал).Затем выхожу из программы.Потом опять захожу в программу и данная функция не хочет работать с уже созданным файлом. Вопрос: Как сделать чтобы она работа с уже созданным файлом??? void probeg() { system("cls"); cout<<"Введите имя уже созданного файла: "; cin>>filename; ...
C++ Ошибка Declaration terminated incorrectly Declaration terminated incorrectly 1.cpp #include <stdio.h> #include <string.h> #include <iostream.h> #include <conio.h> #include "add.h" void main(){ int i,n,op,vyh=0; rozklad x; подробнее

Показать сообщение отдельно
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295

Создание структуры "префиксное дерево". Ошибка "Access violation writing location". - C++

22.03.2011, 00:42. Просмотров 2326. Ответов 1
Метки (Все метки)

Есть структура данных - бор или префиксное дерево.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class trie
{
    char value; // символ узла
    trie** pointers; // ссылки на следующие узлы
public:
    trie(char value = '#'){
        this->value = value;
        this->pointers = new trie*[26]; // выделение памяти
        FOR(i,0,26) this->pointers[i] = 0; // обнуление
    }
    ~trie(){  }
    void add(const string &s, const int &p){
        if (p >= s.length()) return;
        int i = s[p]-'a';
        if (this->pointers[i] == 0) { // проверка создан ли объект
            this->pointers[i] = new trie(s[p]);
        }
        this->pointers[i]->add(s, p+1);
    }
    // подсчет количества установленных узлов
    int length(){
        int res = 0;
        FOR(i,0,26) 
            if (this->pointers[i] != 0) 
                res += 1 + this->pointers[i]->length();
        return res + int(this->value != '#');
    }
};
Если смотреть на код приведенный выше у меня вылетает ошибка:
Unhandled exception at 0x7c812afb in solution.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0003374c..

Если я использую код приведенный ниже:
Unhandled exception at 0x004117aa in solution.exe: 0xC0000005: Access violation reading location 0x00000018.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    trie(char value = '#'){
        this->value = value;
        this->pointers = (trie**)calloc(26, sizeof(trie*)); // сишное выделение памяти
    }
    ~trie(){  }
    void add(const string &s, const int &p){
        if (p >= s.length()) return;
        int i = s[p]-'a';
        if (!this->pointers[i]) {
            this->pointers[i] = new trie(s[p]);
        }
        this->pointers[i]->add(s, p+1);
    }
Причем это происходить при p = 3444, т.е. глубина дерева = 3444. Не знаете есть ли какие ограничение на память, которую можно выделять динамически или еще что-то в таком духе?

Добавлено через 2 минуты
Что значат ошибки я знаю, я не пойму чем они вызваны.

Добавлено через 10 минут
C++
1
2
3
4
5
6
    vector<trie*> pointers;
public:
    trie(char value = '#'){
        this->value = value;
        this->pointers.resize(26, 0);
    }
Если писать с вектором, тогда ошибка вылетает на библиотеке xmemory
C++
1
2
3
4
5
6
7
8
9
10
11
12
        // TEMPLATE FUNCTION _Allocate
template<class _Ty> inline
    _Ty _FARQ *_Allocate(_SIZT _Count, _Ty _FARQ *)
    {   // check for integer overflow
    if (_Count <= 0)
        _Count = 0;
    else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))
        _THROW_NCEE(std::bad_alloc, NULL);
 
        // allocate storage for _Count elements of type _Ty
    return ((_Ty _FARQ *)::operator new(_Count * sizeof (_Ty))); // вот эта строчка
    }
Ошибка:
Unhandled exception at 0x7c812afb in solution.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0003373c..
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru